我有一个非常简单但也许是愚蠢的问题:
为什么这样做?
def print_list():
for student in student_list:
print(student)
student_list = ["Simon", "Mal", "River", "Zoe", "Jane", "Kaylee", "Hoban"]
print_list()
我开始了解函数和参数的方式,函数print_list()
不应该识别student_list
,因为我没有将它作为函数的参数赋值。
答案 0 :(得分:6)
当您调用print_list()
时,您将student_list
定义为全局变量。
答案 1 :(得分:1)
我理解的方式是你的程序有3个部分
当你调用print_list()时,student_list已经存在。此外,在函数中,您具有搜索变量(student_list)的范围: 1.本地范围(它会因为你没有定义它而失败,只会被引用) 2.全球范围(它会成功,因为它刚刚初始化
答案 2 :(得分:1)
在Python中,当分配时会创建变量。在您的情况下,student_list
在全局范围内分配,因此它是一个全局变量。 (全局范围是不在函数内部的东西。)
当Python遇到一个不是局部变量的函数内的变量时(也就是说,它没有作为参数传入并且没有在函数内部分配),它会自动在全局范围内查找变量。 / p>
如果您想知道global
语句的用途是什么,因为全局变量在函数内部已经可见:global
允许您重新分配全局变量,并且让它在全球生效。例如:
def b():
global a
a = 5
a = 4
print(a) # prints 4
b()
print(a) # prints 5
在大多数情况下,您不需要global
语句,我建议您不要使用它,特别是在您对Python有更多经验之前。 (即使是经验丰富的Python程序员也不会非常使用global
。)