【发布时间】:2017-07-29 17:07:50
【问题描述】:
这是确定列表中的数字是否为素数的代码(python2):
这有效 (1):
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):
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 循环就是这种情况 示例:
def function():
i = 9
k = False
for x in range(2, 9):
if i%x == 0:
k = True
break
print k
打印 k = True 所以变量改变了
所以我的问题是:为什么 (2) 中的变量“复合数”没有变化? 如果 for 循环没有范围,为什么该变量不是函数中的局部变量?为什么它不会“通过两次 for 循环泄漏”并最终成为函数 def 中的局部变量。
我正在尝试理解 python 范围规则,因为我认为我没有完全理解它。提前致谢!
【问题讨论】:
标签: python-2.7 scope