Python列出奇怪的行为

时间:2018-03-14 00:20:43

标签: python list

我的代码中有:

my_list= []

def start()
 my_list = [1, 2, 3]
 for item in my_list:
  print item

它运作正常。但是,如果我打电话给第二个功能。 'for'stament只迭代一次,仅用于列表的第一个元素。

my_list= []

def print_list()
 for item in my_list:
  print item     

def start():
 my_list = [1, 2, 3]
 print_list()

为什么呢?任何帮助/提示?

1 个答案:

答案 0 :(得分:0)

start()函数的范围内,名称my_list绑定到列表[1, 2, 3],但这不会覆盖具有相同名称的空列表(在第1行中创建),因为该清单存在于另一个范围内。如果您尝试从my_list函数中的名称print_list()访问变量,则首先检查自己的作用域(找不到变量),而不是检查父作用域(文件),并且空列表是找到。这就是没有打印输出的原因。

为了避免变量的这种阴影,将变量作为参数传递而不是再次定义它们是有用的:

my_list = []  # is used in your print_list()

def print_list(my_list):
    for item in my_list:  # this is the list passed by start()
        print item

def start():
    my_list = [1,2,3]  # does override my_list but ONLY inside start()
    print_list(my_list)  # passes my_list to print_list

您可以(有时应该)为参数选择您的名称,因为它不需要与start()范围中使用的名称匹配。

如果你想在python中继续编程,我建议你仔细考虑一下,或者阅读documentation关于变量范围的内容。