首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python嵌套的for循环变量'overwrite‘

Python嵌套的for循环变量'overwrite‘
EN

Stack Overflow用户
提问于 2018-02-13 01:03:23
回答 4查看 2.2K关注 0票数 2

对于新手的问题,很抱歉,但是有人请给我解释一下这个嵌套的for循环的内部工作原理。

代码语言:javascript
复制
v,w = 2,4
for v in range(v):
   for w in range(w):
        print('v=',v,'w=',w)

如果我这样运行它,输出将如下所示:

代码语言:javascript
复制
v= 0 w= 0
v= 0 w= 1
v= 0 w= 2
v= 0 w= 3
v= 1 w= 0
v= 1 w= 1
v= 1 w= 2

如果我这样运行它,它可以工作,但至少看起来不像Pythonic式的。

代码语言:javascript
复制
v,w = 2,4
for v in range(v):
    for w in range(w):
        print('v=',v,'w=',w)
    w = 4

能否请一些人解释一下如何最好地解决这个问题?

EN

回答 4

Stack Overflow用户

发布于 2018-02-13 01:06:21

我认为它会“过早”停止(缺少最后一个输出v= 1 w= 3),因为在最后一个循环运行之前,分配给'w‘变量的最后一个值是3

对,是这样。

可以解释一下如何最好地解决这个问题吗?

不要为两种不同的含义重复使用相同的局部变量名:

代码语言:javascript
复制
n_v, n_w = 2, 4
for v in range(n_v):
   for w in range(n_w):
        print('v=', v, 'w=', w)
票数 6
EN

Stack Overflow用户

发布于 2018-02-13 01:13:22

在我看来,这里要注意的最有趣的事情是,只要你停留在相同的for v in range(v)迭代中,range(w)就不会更新。这就是为什么你会得到:

代码语言:javascript
复制
v = 0,  w = 0
v = 0,  w = 1
v = 0,  w = 2
v = 0,  w = 3

但是,在第二次迭代中,当您的v变为1时,range(w)将使用新的值(现在为3 )获取range(w)重新定义的。这就是为什么你会得到:

代码语言:javascript
复制
v = 1,  w = 0
v = 1,  w = 1
v = 1,  w = 2

例如,@wim说,解决这个问题很简单;你只需要使用不同的变量:

代码语言:javascript
复制
for i in range(v):
    for j in range(w):
        # do your thing

上面的一个副作用是,下面的代码确实执行了5次,尽管它写起来很糟糕:

代码语言:javascript
复制
v = 5
for v in range(v):
    # do your thing
票数 1
EN

Stack Overflow用户

发布于 2018-02-13 01:07:51

嗨,彼得,看wim的答案,他是对的。

重写代码如下:

代码语言:javascript
复制
v,w = 2,4
  for v1 in range(v):
     for w1 in range(w):
         print('v=',v1,'w=',w1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48751764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档