我想知道是否有可能在单行中使用*运算符,以实现以下功能:

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/

10-12 18:13