Python 当参数在函数f()的作用域下时,为什么会发生此错误?

Python 当参数在函数f()的作用域下时,为什么会发生此错误?,python,function,oop,Python,Function,Oop,错误: def f(a, *arguments): for arg in arguments: print(arg) return arg f(5) 输出如下: def f(a, *arguments): for arg in range(1,4): print(arg) return arg f(5) 现在arg在函数中是全局的。为什么会这样 1 2 3 因为*参数是空的,所以永远不会进入循环。因此,当到达return(ar

错误:

def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg
f(5)
输出如下:

def f(a, *arguments):
    for arg in range(1,4):
        print(arg)
    return arg
f(5)
现在arg在函数中是全局的。为什么会这样

1
2
3

因为*参数是空的,所以永远不会进入循环。因此,当到达
return(arg)
时,变量仍然未定义。试着用
f(5,[1,2,3])
来称呼它,你会看到更像你期望的东西。

@Prune的答案适合你的问题。即使
arguments
为空,您可能仍希望返回一些内容。可以通过添加参数长度检查来完成此操作

def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg


f(5)
def f(a, *arguments):
    for arg in arguments:
        print(arg)
    return arg


f(5)
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)