python - 带导入的全局变量

标签 python global

first.py
myGlobal = "hello"

def changeGlobal():
   myGlobal="bye"

second.py
from first import *

changeGlobal()
print myGlobal

我得到的输出是

hello

虽然我认为应该是

bye

为什么调用changeGlobal()函数后全局变量myGlobal没有变化?

最佳答案

试试:

def changeGlobal():
    global myGlobal
    myGlobal = "bye"

实际上,这也行不通。当您 import * 时,您创建了一个新的 local 模块全局 myGlobal,它不受您想要的更改的影响(只要您不是改变变量,见下文)。你可以改用这个:

import nice

nice.changeGlobal()
print nice.myGlobal

或者:

myGlobal = "hello"

def changeGlobal():
   global myGlobal
   myGlobal="bye"

changeGlobal()

但是,如果您的 global 是一个可变容器,那么您现在持有对可变容器的引用并且能够看到对其所做的更改:

myGlobal = ["hello"]

def changeGlobal():
    myGlobal[0] = "bye"

关于python - 带导入的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706879/

相关文章:

python - 是否所有多线程程序都在 GPU 上运行?

c - 通过main传入并设置global int

javascript - 覆盖现有的 JavaScript 函数

javascript - 带参数的函数中的全局变量

c++ - 动态链接共享库中的全局变量和静态变量会发生什么情况?

python - Pandas 数据框按顺序分组

python - Pandas 保持最新行更新

python - 禁止 Python ldap3 搜索结果引用

java - 为什么Java不允许在类外初始化变量或常量?

python - 如何获取列表中的元素数量?