在理解字符串排列及其在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