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 分配给变量会更快。可读性也很重要。
我经常发现自己在做一些愚蠢的事情,比如
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 分配给变量会更快。可读性也很重要。