可变全局变量不会隐藏在python函数中,对吗?

2024-04-27 02:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

请参阅以下代码:

def good():
  foo[0] = 9         # why this foo isn't local variable who hides the global one

def bad():
  foo    = [9, 2, 3] # foo is local, who hides the global one

for func in [good, bad]:
  foo = [1,2,3]

  print('Before "{}": {}'.format(func.__name__, foo))
  func()
  print('After  "{}": {}'.format(func.__name__, foo))

结果如下:

^{pr2}$

Tags: thenameformatfoolocaldef请参阅global
3条回答

在python中,变量将首先查找其内部范围,然后再查找外部范围。例如:

FOO = 'global'

def printfoo():
    print FOO
# prints 'global'

def printfoolocal():
    FOO = 'local'
    print FOO
# prints 'local'

如果要修改全局范围的变量,则需要使用global关键字

^{pr2}$

因为没有设置foo,所以在foo中得到了一些东西(确切地说是foo[0])。在

bad中创建一个新变量foo。在good中,您可以执行类似于foo.set(0, 9)(将项目0设置为值9)。它是使用变量,而不是定义新名称。在

为了简单起见,python首先查看局部变量,然后再查看全局变量。(用于读取或创建变量)

所以,好的话,你需要一个foo变量:没有局部foo变量和一个全局foo变量=>;你取全局变量并修改它。在

在bad中,您创建了一个新的(局部)变量,因此全局变量不会被修改。在

可以使用global关键字指定变量为全局变量:

def good2():
    global foo
    foo    = [9, 2, 3]

相关问题 更多 >