def inside if/else 三元表达式

def inside if/else ternary expression

有没有办法转换这个:

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)

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

谢谢!

lambda 中有一个三元 ?

a = lambda counts:a_with_counts if counts else a_without_counts

然后

a(True)   # or False

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

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

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

如果您只打算调用一次。