函数中使用的全局变量是否需要在 def 块之前定义?
Does global variable used in a function need to be defined before the def block?
我必须承认我没想到下面的代码可以工作(来自我同事的代码示例):
def foo():
li.append(3)
li = [1, 2]
foo()
print(li) # gives [1, 2, 3]
我的问题是:
- 为什么 'def foo()' 中不需要 'global li'?
- 为什么 'li = [1, 2]' 不需要放在 'def foo()' 之前?
ps。 Python 3.6.1 用于列出的代码示例。
- 由于列表是在调用 foo() 之前定义的,因此没有错误。
global
关键字仅在我们要进行赋值或更改全局变量时才需要。访问方法或打印变量不需要 global
关键字
全局关键字是允许用户修改当前范围之外的变量的关键字。
全局关键字规则:
- 如果变量在函数的任何位置赋值
body,除非明确声明为,否则假定为本地
全球。
- 仅在函数内部引用的变量是
隐式全局。
- 我们使用 global 关键字在
功能。
- 没有必要在函数外使用 global 关键字。
您的代码,您没有更改或分配 'li' 值
2.Here 列表是在调用 foo() 之前定义的,所以它可以工作 fine.suppose 如果你在定义 li 之前调用 foo(),它会抛出类似 NameError: name 'li' 未定义
我必须承认我没想到下面的代码可以工作(来自我同事的代码示例):
def foo():
li.append(3)
li = [1, 2]
foo()
print(li) # gives [1, 2, 3]
我的问题是:
- 为什么 'def foo()' 中不需要 'global li'?
- 为什么 'li = [1, 2]' 不需要放在 'def foo()' 之前?
ps。 Python 3.6.1 用于列出的代码示例。
- 由于列表是在调用 foo() 之前定义的,因此没有错误。
global
关键字仅在我们要进行赋值或更改全局变量时才需要。访问方法或打印变量不需要global
关键字
全局关键字是允许用户修改当前范围之外的变量的关键字。
全局关键字规则:
- 如果变量在函数的任何位置赋值 body,除非明确声明为,否则假定为本地 全球。
- 仅在函数内部引用的变量是
隐式全局。 - 我们使用 global 关键字在 功能。
- 没有必要在函数外使用 global 关键字。
您的代码,您没有更改或分配 'li' 值
2.Here 列表是在调用 foo() 之前定义的,所以它可以工作 fine.suppose 如果你在定义 li 之前调用 foo(),它会抛出类似 NameError: name 'li' 未定义