def f(a, *arguments):
for arg in arguments:
print(arg)
return arg
f(5)
错误:
Traceback (most recent call last):
File "test.py", line 6, in <module>
f(5)
File "test.py", line 5, in f
return arg
UnboundLocalError: local variable 'arg' referenced before assignment
如果您这样更改函数f()
def f(a, *arguments):
for arg in range(1,4):
print(arg)
return arg
f(5)
输出是这样的:
1
2
3
现在arg在函数中是全局的。为什么会这样?
答案 0 :(得分:1)
def f(a, *arguments):
for arg in arguments:
print(arg)
return arg
f(5)
由于*参数为空,因此您永远不会进入循环。因此,当您到达return(arg)
时,变量仍未定义。尝试用f(5, [1, 2, 3])
调用它,您会看到更像您期望的东西。
答案 1 :(得分:0)
@Prune的答案很适合您的问题。即使arguments
为空,您可能仍想返回一些内容。您可以通过添加参数长度检查来实现。
def f(a, *arguments):
if len(arguments):
for arg in arguments:
print(arg)
return arg # will return last element in arguments always
return -1 # will return default value here
f(5)