我遇到了一个全局变量不被记住的问题"在它被修改为2个不同的功能之后。变量df
应该是一个数据框,并且在用户加载到正确的文件中之前它并不指向任何内容。这类似于我所拥有的(使用pandas
和tkinter
):
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()
之后调用{p> load()
。事情是,当我致电save()
时,我收到的错误是" df
未定义。"我认为df
在init()
获得了初始分配,然后更新了#34;在load()
?我在这里做错了什么?
答案 0 :(得分:5)
哟必须使用<{1}} 里面需要修改全局变量的函数。否则(如果写入),您将在函数内创建一个同名的本地范围变量,并且您的更改不会反映到全局变量。
global df
输出:
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)
答案 1 :(得分:3)
您必须在函数内部而不是在外部使用global
关键字。您在函数中定义的所有df
都是本地作用域。这是正确的方法 -
df = pd.DataFrame() # No need to use global here
def __init__(self, master):
global df # declare here
df = None
....
def load(self):
global df # declare here
....
df = pd.read_csv(filepath)
def save(self):
global df # declare here
....
df = df.append(...)