为什么在使用函数定义函数后能够定义变量?

时间:2011-12-05 22:59:12

标签: python list function data-structures arguments

我有一个非常简单但也许是愚蠢的问题:

为什么这样做?

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,因为我没有将它作为函数的参数赋值。

3 个答案:

答案 0 :(得分:6)

当您调用print_list()时,您将student_list定义为全局变量。

答案 1 :(得分:1)

我理解的方式是你的程序有3个部分

  1. 定义print_list()
  2. 初始化student_list(全局变量)
  3. call print_list()
  4. 当你调用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。)