非常奇妙的循环行为:列出变更身份.怎么了?

pin*_*aas 5 python scope loops for-loop

不知怎的,这样做之后

list2 = [x for x in range(10)]

list1 = [ x for x in range(10,20)]

 for k, list1 in enumerate([list1,list2]):
    for number, entry in enumerate(list1):
        print number, entry 
Run Code Online (Sandbox Code Playgroud)

突然id(list2)==id(list1)评价为True?究竟发生了什么?当循环运行时,这似乎不是第一个输出符合预期的情况:

0 10,1 1 2,1 12,... 0 0,1 1,2 3,...

第二个虽然给出:

0 0,1 1,2 2 ......

这怎么可能?

只需将代码更改为:

list2 = [x for x in range(10)]

list1 = [ x for x in range(10,20)]
Run Code Online (Sandbox Code Playgroud)

摆脱这种行为.

 for k, NEWVAR in enumerate([list1,list2]):
    for number, entry in enumerate(list1):
        print number, entry 
Run Code Online (Sandbox Code Playgroud)

rod*_*igo 6

你写:

list1 = [ x for x in range(10,20)]
Run Code Online (Sandbox Code Playgroud)

然后:

for k, list1 in ...
Run Code Online (Sandbox Code Playgroud)

list1对两个不同但混合的对象使用相同的名称!没有任何好处可以从中产生.

只需为循环使用不同的名称:

for k, l in enumerate([list1,list2]):
    for number, entry in enumerate(l):
Run Code Online (Sandbox Code Playgroud)

请记住,在Python中只有两个范围,粗略地说:

  • 模块范围和
  • 功能范围.