def if / else三元表达式内部

时间:2018-10-26 13:18:49

标签: python conditional-operator

有没有一种方法可以将其转换:

if counts:
    def a(l):
        return a_with_counts(l)
else:
    def a(l):
        return a_without_counts(l)

转换为三元表达式?

我尝试过这样的事情

def a(l):
    return a_with_counts(l) if counts else a_without_counts(l)

但是我不希望每次调用if counts时都对a(l)进行求值,我想在方法开始时执行一次,然后在每次调用时直接对赋值的函数求值a(l)。这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以通过如下定义闭包来实现:

def gen_a(counts):
    return a_with_counts if counts else a_without_counts

a = gen_a(counts)

这相当于写作

a = a_with_counts if counts else a_without_counts

如果您只想调用一次。

答案 1 :(得分:3)

lambda中带有三进制?

a = lambda counts:a_with_counts if counts else a_without_counts

然后

a(True)   # or False

将创建您可以调用的a_with_counts(分别是a_without_counts)函数。