Python 如果 x 为 y

Python if x as y

我经常发现自己在做一些愚蠢的事情,比如

if some_function():
    self.value = some_function()

这使得函数执行了两次。它将通过

之类的方式进行纠正
value = some_function():
if value:
    self.value = value

如果Python允许像

这样的东西就好了
if some_function() as value:
    self.value = value

节省一些 space,而且非常清晰。我什至会说它看起来像 pythonic。

所以,我知道这不是有效的语法,但是有没有我不知道的类似结构?是否值得向 Python 软件基金会推荐它?

你总是可以这样做:

>>> self.value = some_function() or self.value

Python 通过强制 if 条件成为表达式,并在座右铭 "Explicit is better than implicit" 下进行赋值而不是表达式,故意禁止这样的构造。你应该写

value = some_function():
if value:
    self.value = value

(但是,它适用于 Ruby、C、JavaScript、Java... 以及赋值是表达式的任何其他语言。)

def if_to_for(condition):
    if condition: yield condition

for value in if_to_for(some_function()):
    self.value = value

也可以。

如果条件为真,循环将执行一次,如果为假,则根本不会执行。

理论上:

if (lambda v: globals().update({'value':v}) or v)(some_function()):
    self.value = value

在执行 if 之前,将函数的 return 分配给变量会更快。可读性也很重要。