当参数在函数f()的范围内时,为什么会发生此错误?

时间:2020-04-21 01:15:09

标签: python function oop

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在函数中是全局的。为什么会这样?

2 个答案:

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