函数中的局部变量输出让我感到惊讶

时间:2011-11-01 19:36:03

标签: python

以下计划:

a_var = 10
b_var = 15
e_var = 25

def a_func(a_var):

    print "in a_func a_var = ",a_var
    b_var = 100 + a_var
    d_var = 2*a_var
    print "in a_func b_var = ",b_var
    print "in a_func d_var = ",d_var
    print "in a_func e_var = ",e_var
    return b_var + 10

c_var = a_func(b_var)

打印此输出:

  

在a_func中a_var = 15
  在a_func中b_var = 115
  在a_func中d_var = 30
  在a_func e_var = 25

我不确定为什么“在a_func a_var”中等于15而不是10。

4 个答案:

答案 0 :(得分:2)

你可能应该看看variable scoping来理解为什么事情会这样运作;传入的参数优先。

答案 1 :(得分:1)

这是因为函数的参数名为a_var,这会隐藏全局变量。

您将函数调用为a_func(b_var),因此参数的值为15.

答案 2 :(得分:1)

您的函数将a_var作为参数;这“覆盖”了全球价值。由于您将b_var(15)的值传递给函数,因此它将a_var视为15。

答案 3 :(得分:0)

使用此简化案例更容易看到

A = 10
B = 15

def foo(A):
    print A # prints 15

foo(B)