函数定义中已加星标的变量的默认初始化

时间:2016-12-20 01:21:09

标签: python function variables initialization default

众所周知,为了在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)来切换语法,但遇到了同样的错误。是否可以将星号变量初始化为默认值?

2 个答案:

答案 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")