函数有时指的是局部变量,有时也指全局变量

时间:2017-07-28 12:53:34

标签: python python-2.7

我正在尝试从给定的输入变量创建字典。

我遇到了极其奇怪的行为,所以我开始调查。

我终于得出结论,函数有时会引用局部变量,有时会搜索相同名称的全局变量。

更具体地说:

  • 当我在循环中创建字典时,它指的是全局变量
  • 当我逐个创建字典
  • 时,它指的是本地变量
  • 当我在循环中创建元组列表时,它指的是本地变量
  • 当我逐个创建元组列表时,它指的是本地变量

这是一段简短的代码,说明了这个问题:

x = 1
y = 2
z = 3

def func(x,y,z):
    print {var:eval(var) for var in ['x','y','z']}          # Uses globals
    print {'x':eval('x'),'y':eval('y'),'z':eval('z')}       # Uses locals
    print [(var,eval(var)) for var in ['x','y','z']]        # Uses locals
    print [('x',eval('x')),('y',eval('y')),('z',eval('z'))] # Uses locals

func(4,5,6)

打印输出:

{'y': 2, 'x': 1, 'z': 3}
{'y': 5, 'x': 4, 'z': 6}
[('x', 4), ('y', 5), ('z', 6)]
[('x', 4), ('y', 5), ('z', 6)]

有人可以解释一下我在这里缺少什么吗?

谢谢。

0 个答案:

没有答案
相关问题