Python Global Variables - Not Defined?

前端 未结 2 831
死守一世寂寞
死守一世寂寞 2021-01-20 20:39

I\'m running into an issue where a global variable isn\'t \"remembered\" after it\'s modified in 2 different functions. The variable df is supposed to be a data

相关标签:
2条回答
  • 2021-01-20 20:53

    You have to use the global keyword inside the function rather than outside. All the df that you have defined inside your function are locally scoped. Here is the right way -

    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(...)
    
    0 讨论(0)
  • 2021-01-20 21:03

    Yo have to use global df inside the function that needs to modify the global variable. Else (if writing to it) you are creating a local scoped variable of the same name inside the function and your changes wont be reflected to the global one.

    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)
    

    Output:

    bla   # global
    
    print from func: bla    # readonly global
    
    local variable 'p' referenced before assignment  # same named local var confusion
    
    bla    # global
    blubb  # changed global
    
    0 讨论(0)
提交回复
热议问题