if/else 三元表达式中的 def
Posted
技术标签:
【中文标题】if/else 三元表达式中的 def【英文标题】:def inside if/else ternary expression 【发布时间】:2019-03-31 06:28:45 【问题描述】:有没有办法转换这个:
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)
时直接评估分配的函数。这可能吗?
谢谢!
【问题讨论】:
为什么要三元表达式? 为什么不将counts
作为参数添加到函数def a(l, counts=True):
等中
@B001ᛦ,因为对于给定的输入,我必须多次运行该方法,而counts
保持不变。
@Chris_Rands 我不想每次都评估counts
。对于给定的输入,我想做一次,然后在整个过程中使用分配的函数:)
【参考方案1】:
您可以通过如下定义闭包来实现:
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
如果您只打算调用一次。
【讨论】:
啊哈!谢谢,这正是我需要的。我不得不承认这不会超出我的想法!【参考方案2】:在lambda
中有一个三元?
a = lambda counts:a_with_counts if counts else a_without_counts
然后
a(True) # or False
将创建您可以调用的a_with_counts
(resp a_without_counts
) 函数。
【讨论】:
命名的 lambdas :S 请注意 Python PEP 8 style guide 始终使用 def 语句而不是将 lambda 表达式直接绑定到标识符的赋值语句。 @Skandix OP 不想每次都评估counts
该死的,我现在对lambda
感到内疚,因为你:)
它在 *** 上被很好地提及:参见 here、here 和 here以上是关于if/else 三元表达式中的 def的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript-流程控制(if else三元表达式switch)循环(forwhilecontinue break)