gpt4 book ai didi

Python 全局变量 - 未定义?

转载 作者:行者123 更新时间:2023-12-02 07:12:19 32 4
gpt4 key购买 nike

我遇到了一个问题,即全局变量在两个不同的函数中修改后不会被“记住”。变量df应该是一个数据框,并且在用户加载正确的文件之前它不会指向任何内容。这类似于我的东西(使用 pandastkinter ):

global df

class World:

def __init__(self, master):
df = None
....

def load(self):
....
df = pd.read_csv(filepath)

def save(self):
....
df = df.append(...)

save()总是在 load() 之后调用。事情是,当我调用save()时,我收到错误“df 未定义”。我以为dfinit() 中得到其初始分配,然后在 load() 中得到“更新” ?我在这里做错了什么?

最佳答案

您必须在需要修改全局变量的函数内使用global df内部。否则(如果写入),您将在函数内创建一个同名的局部作用域变量,并且您的更改将不会反射(reflect)在全局变量中。

p = "bla"

def func():
print("print from func:", p) # works, readonly access, prints global one

def func1():
try:
print("print from func:", p) # error, python does not know you mean the global one
p = 22 # because function overrides global with local name
except UnboundLocalError as unb:
print(unb)

def func2():
global p
p = "blubb" # modifies the global p

print(p)
func()
func1()
print(p)
func2()
print(p)

输出:

bla   # global

print from func: bla # readonly global

local variable 'p' referenced before assignment # same named local var confusion

bla # global
blubb # changed global

关于Python 全局变量 - 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715854/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com