Python 解释器中的全局/局部作用域?这是什么妖术

标签 python scope global local

这是我的简单脚本,名为 aScript.py:

a = 0

def load():
    global a
    a = 1

def plot():
    print a

然后在python解释器中执行以下4条命令:

>>>from aScript import *
>>>print a
>>>load()
>>>print a  

为什么打印:

0
0        

而不是(顺便说一句,这是我所期望的):

0
1   

我使用的是 python 2.6。

谢谢!

...为什么打印0 0?

最佳答案

global变量仅在其自己的模块中是全局的,因此 load()仅修改 a里面的变量 aScript ,不是导入的a .

当你这样做时from aScript import * , python 迭代aScript的公共(public)变量并在当前模块中创建每个变量的副本,即创建 __main__.a等于 aScript.a 。现在您调用load ,实际上是 aScript.load它修改了它自己的 a ( aScript.a ),但因为它不知道 __main__.a ,后者保持不变。

关于Python 解释器中的全局/局部作用域?这是什么妖术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134819/

相关文章:

python - 使用 python 将字典或 JSON 文件列表导入 Elasticsearch

java - 具有范围原型(prototype)的 Spring beans

javascript - JavaScript 中变量阴影的正确术语是什么?

r - 在 R 中本地(而不是全局)设置种子

javascript - 某些 Javascript 在单个页面上工作,但在通过 Drupal 主题的 javascript 全局加载时不起作用

python - 用 numpy 连接数组的元素?

python - 我想在第一个空行开始解析文本文件

python - 如何将一个列表中的字典项添加到另一个列表中的另一个字典

javascript - JS 函数缺少参数,仍然有效吗?

Python:将变量的值转换为函数的名称?