首页 > 解决方案 > 为什么我的函数使用局部变量而不是全局变量?

问题描述

所以做了一个简单的例子来帮助自己更好地理解范围。

据我了解,函数中的变量仅对该函数是本地的。如果要使用函数外部的变量,该变量与函数内的局部变量同名,则可以使用 global 关键字,它告诉函数忽略具有该名称的任何局部变量并仅使用全局变量。

所以这个程序应该首先打印全局变量的值,然后调用函数并再次打印全局变量,因为它应该忽略局部变量,但无论如何它都会打印局部变量。Python 导师告诉我它完全跳过了全局语句。

 cheese = 99
    
    
    def func():
        global cheese
        cheese = 100
        print(f"Global cheese is {cheese}")
    
    
    
    print(f"Global cheese is {cheese}")
    func()

输出:

全球奶酪是99

全球奶酪是 100

然后当我在 print 语句之前调用函数时,变量被更改为局部变量的值。这是为什么?

cheese = 99


def func():
    global cheese
    cheese = 100
    print(f"Global cheese is {cheese}")



func()
print(f"Global cheese is {cheese}")

输出:

全球奶酪是 100

全球奶酪是 100

标签: pythonpython-3.x

解决方案


但是您声明要在函数中使用全局变量。因此,当您分配一个值时,它会更改全局变量。

cheese = 99
    
    
def func():
  global cheese # Declares that you want to use global cheese variable
  cheese = 100  # This updates the global cheese variable
  print(f"func() cheese is {cheese}")
    
def local_func():
  cheese = 101
  print(f"local_func() cheese is {cheese}")


print(f"Global cheese is {cheese}")        
func()
print(f"Global cheese is {cheese}")
local_func()
print(f"Global cheese is {cheese}")

结果是:

Global cheese is 99
func() cheese is 100
Global cheese is 100
local_func() cheese is 101
Global cheese is 100

推荐阅读