首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套for循环中的Python作用域规则

嵌套for循环中的Python作用域规则
EN

Stack Overflow用户
提问于 2017-03-08 22:24:58
回答 1查看 2.4K关注 0票数 1

这是确定列表中的数字是否为素数的代码(python2):

这项工作(1):

代码语言:javascript
复制
    L = [4 , 9, 13, 15, 16]

    def primenumber4():
        for i in L:
            compositenumber = False
            for x in range(2,i):
                if i%x == 0:
                    compositenumber = True              
                    break
            if compositenumber:
                print "%s is not a prime number" % i        
            else:   
                print "%s IS a prime number" % i

    primenumber4()

但这并不是(2):

代码语言:javascript
复制
    L = [4 , 9, 13, 15, 16]

    def primenumber4():
        compositenumber = False
        for i in L:
            for x in range(2,i):
               if i%x == 0:
                   compositenumber = True               
                   break
            if compositenumber:
                print "%s is not a prime number" % i        
            else:   
                print "%s IS a prime number" % i

    primenumber4()

它给出的数字13不是质数。

但是为什么呢?

根据这一做法:Short Description of the Scoping Rules?

在Antti Haapala的回答中,“对于Python的许多新手来说,最大的惊喜之一是for循环不会创建一个可变范围”。

因此,我设想值“泄漏”到函数范围中:这是单个for循环示例的情况:

代码语言:javascript
复制
    def function():
        i = 9
        k = False
        for x in range(2, 9):
            if i%x == 0:
                k = True                
                break

        print k

,它打印k= True,因此变量更改。

所以我的问题是:为什么变量"compositenumber“在(2)中没有变化?如果for循环没有作用域,为什么变量不是函数中的局部变量?为什么它不“两次通过两个for循环”并在函数def中作为局部变量结束。

我试图理解python作用域规则,因为我认为我没有完全理解它。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 22:29:58

这不是一个范围问题。问题是,当在primenumber = False循环中分配for时,每次遍历循环时都会发生这种分配。它每次都将值重置为False

当您在循环上面分配primenumber = False时,它只以这种方式分配一次,所以primenumber在第一次设置为True之后仍然是True

此外,primenumber是一个糟糕的变量名称,它指示一个数字是否是复合的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42683071

复制
相关文章

相似问题

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