【发布时间】:2021-06-20 17:29:56
【问题描述】:
所以做了一个简单的例子来帮助自己更好地理解范围。
据我了解,函数中的变量仅对该函数是本地的。如果要使用函数外部的变量,该变量与函数内的局部变量同名,则可以使用 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
【问题讨论】:
-
什么局部变量?你没有。
-
要么你误读了 Python 导师的事情,要么 Python 导师的事情是错误的。这里没有局部变量。
-
不,您要分配给全局,因为同一函数中有
global cheese。 -
您对
global所做的事情的理解 - “如果您想使用函数外部的变量,该变量与函数内的局部变量同名,您可以使用 global 关键字告诉你的函数忽略任何具有该名称的局部变量,只使用全局变量。” - 是错的。global不会让 Python 忽略局部变量。如果您在函数中使用global cheese,则该函数根本没有cheese局部变量。没有可忽略的局部变量。 -
“然后调用该函数并再次打印全局变量,因为它应该忽略局部变量,但无论如何它都会打印局部变量”。不,它会打印全局变量,因为 没有 局部变量。即使您刚刚写了
cheese = 100,您似乎仍然希望它仍然向您显示99,因为您希望它与全局cheese分开。global语句的整点是使它不成为一个单独的cheese。
标签: python python-3.x