众所周知,为了在Python中的函数内为变量设置默认值,使用以下语法:
def func(x = 0):
if x == 0:
print("x is equal to 0")
else:
print("x is not equal to 0")
因此,如果函数被调用:
>>> func()
导致
'x is equal to 0'
但是当类似的技术用于星号变量时,例如,
def func(*x = (0, 0)):
导致语法错误。我也尝试通过执行(*x = 0, 0)
来切换语法,但遇到了同样的错误。是否可以将星号变量初始化为默认值?
答案 0 :(得分:2)
星形变量是非标准变量,用于允许具有任意长度的函数
*变量是一个包含所有位置参数的元组(通常命名为args)
**变量是一个包含所有命名参数的字典(通常命名为kwargs)
他们将永远在那里,如果没有提供,他们就是空的。您可以测试值是否在字典或元组中,具体取决于参数的类型并初始化它。
def arg_test(*args,**kwargs):
if not args:
print "* not args provided set default here"
print args
else:
print "* Positional Args provided"
print args
if not kwargs:
print "* not kwargs provided set default here"
print kwargs
else:
print "* Named arguments provided"
print kwargs
#no args, no kwargs
print "____ calling with no arguments ___"
arg_test()
#args, no kwargs
print "____ calling with positional arguments ___"
arg_test("a", "b", "c")
#no args, but kwargs
print "____ calling with named arguments ___"
arg_test(a = 1, b = 2, c = 3)
答案 1 :(得分:2)
默认情况下,已加星标的变量的值为空元组()
。虽然由于星号参数的工作原理而无法更改默认值(tl; dr:Python指定未加星标的参数,如果有任何可用参数并将其余部分收集在元组中;您可以在相关内容中阅读更多相关信息PEP 3132:https://www.python.org/dev/peps/pep-3132/)您可以在函数开头实现检查,以确定x
是否为空元组,然后相应地进行更改。您的代码看起来像这样:
def func(*x):
if x == (): # Check if x is an empty tuple
x = (0, 0)
if x == 0:
print("x is equal to 0")
else:
print("x is not equal to 0")