我的代码中有:
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()
为什么呢?任何帮助/提示?
答案 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关于变量范围的内容。