我想知道是否有可能在单行中使用*运算符,以实现以下功能:
if node['args'] != None:
return_val = funct(*node['args'])
else:
return_val = funct()
我以为我可以说
return_val = funct(*node['args'] if node['args'] != None else None)
但是事实证明这和说的一样
if node['args'] != None:
return_val = funct(*node['args'])
else:
return_val = funct(*None)
这对于
*None
没有任何意义。我厌倦了将第一个选项放在括号中,但这只会引发
SyntaxError: can't use starred expression here
return_val = funct((*node['args']) if node['args'] != None else None)
最佳答案
是的,您需要提供一个空序列,而不是None
:
>>> def f(*args):
... for arg in args:
... print(arg)
...
>>> x = None
>>> y = ('a','b')
>>> f(*(y if x is not None else ()))
>>> x = object()
>>> f(*(y if x is not None else ()))
a
b
但是我认为您的
if -else
语句方法更可取。我只需要看一次就可以知道发生了什么。对于条件表达式,我必须考虑一下。另外,这是一个条件表达式,而不是“单行if语句”。
关于python - 在单行if语句python中正确使用*运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46695522/