在理解字符串排列及其在python中的实现(关于this post)时,我偶然发现了使用range()
的for
循环中的某些内容,我只是不明白。Python - 范围()在递归时变异变量值吗?
看看下面的代码:
def recursion(step=0):
print "Step I: {}".format(step)
for i in range(step, 2):
print "Step II: {}".format(step)
print "Value i: {}".format(i)
print "Call recursion"
print "\n-----------------\n"
recursion(step + 1)
recursion()
这让下面的输出:
[email protected]:~# python range_test.py
Step I: 0
Step II: 0
Value i: 0
Call recursion
-----------------
Step I: 1
Step II: 1
Value i: 1
Call recursion
-----------------
Step I: 2
Step II: 0 <---- WHAT THE HECK?
Value i: 1
Call recursion
-----------------
Step I: 1
Step II: 1
Value i: 1
Call recursion
-----------------
Step I: 2
[email protected]:~#
正如你可以看到变量step
使用range()
一定for
循环运行后得到一个新值 - 见标记WHAT THE HECK
。
任何想法来解除雾?
'range(2,2)'为空。它不会进入'for'循环。因此,它会打印“Step I:2”,然后返回,带有'range(1,2)'的前一个函数然后也完成了它的1次迭代,然后您又回到'step'为0的位置。 –
[ 'itertools.permutations'](https://docs.python.org/2/library/itertools.html#itertools.permutations) – GingerPlusPlus