使用与传递的变量相同的函数参数名称

时间:2017-06-27 13:49:01

标签: python

以下是否有任何问题?:

def foo(bar):
    for b in bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

通常在我的代码中,我将函数参数更改为与传递的变量不同的名称。

def foo(_bar):
    for b in _bar:
        print (b)

bar = ['hello', 'world']

foo(bar)

我这样做只是为了安全,但是当其他人看到代码时,我认为如果我可以保持相同的名称以便他们确切知道传递的内容将会很棒。

4 个答案:

答案 0 :(得分:2)

从语法角度来看,1个例子没有任何问题。 Python在尝试获取变量值时遵循LEGB rule,因此当您使用bar作为参数时,您将在bar函数的范围内重写全局foo

答案 1 :(得分:1)

你可以保持同名,但这并不重要。函数内定义的变量无法在外部访问。

答案 2 :(得分:1)

这样做的唯一风险是,如果您使用任何global variable变量的范围没有影响。

根据变量名称,它可能会混淆使用相同的变量名称,但我认为你应该真正使用在给定上下文的情况下最有意义的东西。例如,像

这样的东西
do_angle_computation(theta):
    return sin(theta) * cos(theta)

theta = 30
print do_angle_computation(theta)

它完全没问题。

答案 3 :(得分:1)

嗯,没有问题,因为在函数内定义的变量具有 local 范围。

IMO,这个问题只在你的函数需要使用相同名称的局部变量和一些全局变量时才有意义。但是你应该首先避免这种设计。

这就是我处理这种情况的方法:

def foo(bar):
    for b in bar:
        print (b)

def main():
    bar = ['hello', 'world']
    foo(bar)
    ...

更多,值得一提的是,在你的第二个例子中,_variable通常用于Python中的 privatish (内部使用)事物,但这只是一个约定(它不是由语言以任何方式强制执行,因为Python程序员都是consenting adults)。我宁愿使用:variable_代替。