在oneline if语句python中正确使用*运算符

Ind*_*igo 8 python python-3.x

我想知道是否可以在oneline上使用*运算符来实现以下功能:

if node['args'] != None:
    return_val = funct(*node['args'])
else:
    return_val = funct()
Run Code Online (Sandbox Code Playgroud)

我想我可以说

return_val = funct(*node['args'] if node['args'] != None else None)
Run Code Online (Sandbox Code Playgroud)

但事实证明这与说法相同

if node['args'] != None:
    return_val = funct(*node['args'])
else:
    return_val = funct(*None)
Run Code Online (Sandbox Code Playgroud)

这没有任何意义*None.

我厌倦了括号中的第一个选项,但这只是抛出 SyntaxError: can't use starred expression here

return_val = funct((*node['args']) if node['args'] != None else None)
Run Code Online (Sandbox Code Playgroud)

jua*_*aga 4

是的,您需要提供一个空序列,而不是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
Run Code Online (Sandbox Code Playgroud)

但我认为你的if -else陈述方式更可取。我只需要看一次,我就能立即知道发生了什么。有了条件表达式,我就得考虑一下了。

另外,这是一个条件表达式,而不是“单行 if 语句”。