是否需要在def块之前定义函数中使用的全局变量?

问题描述 投票:1回答:2

我必须承认我没想到以下代码可以工作(我的一个同事的代码示例):

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。

append python-3.6
2个回答
0
投票
  1. 由于列表是在调用foo()之前定义的,因此没有错误。
  2. global关键字仅在我们要进行赋值或更改全局变量时才需要。访问方法或打印变量不需要global关键字

0
投票
  1. 全局关键字是允许用户修改当前作用域之外的变量的关键字。

    全局关键字规则:

    • [如果在函数的任何位置为变量分配了值,正文,除非明确声明为本地,否则假定为本地全球。
    • 仅在函数内部引用的变量是隐含地全局。
    • 我们使用global关键字在功能。
    • 不需要在函数外使用全局关键字。

您的代码,您没有更改或分配'li'值

2。这里列表是在调用foo()之前定义的,因此它可以正常工作。假设如果在定义li之前调用foo(),它将抛出类似NameError的错误:未定义名称'li']

© www.soinside.com 2019 - 2024. All rights reserved.