Python中*args默认值设置及参数传递报错问题咨询
问题1:为何无法给*args设置=None,以及尝试代码的错误
- Python语法明确规定,可变位置参数
*args不允许设置默认值。*args的作用是收集函数调用时传入的多余位置参数,自动打包成一个元组,它默认就是空元组,不需要额外指定默认值。 - 你写的
if *args:是语法错误:*是解包运算符,不能直接用于条件判断。要判断是否传入了参数,直接用if args:即可(空元组在布尔判断中会被视为False)。 - 其实根本不需要分情况判断:不管
func是否需要参数,直接执行new_data = func(*args)就够了——如果args是空元组,这行代码等价于func(),完美适配无参数函数;如果args有内容,就会把参数传递给func。
问题2:报错TypeError: function takes 0 positional arguments but 1 were given的原因
你调用tmp2.refresh(hello_world, None)时,None会被*args收集成元组(None,),代码执行func(*args)就变成了hello_world(None)。但你的hello_world函数定义时不接受任何参数,自然会触发参数不匹配的错误。
- 正确的调用方式是直接传入函数:
tmp2.refresh(hello_world),此时*args是空元组,func(*args)等价于hello_world(),完全符合函数的参数要求。
内容的提问来源于stack exchange,提问作者Mathio
相关产品推荐
相关产品推荐

