最近翻以前的**的時候發現了乙個問題 ,先看一下下面**
def test():
for i in xrange(2):
print 'before', i
for i in xrange(2, 4):print 'middle', i
print 'after', i
看到**之後,發現內層for迴圈變數和外層的迴圈的名字一致,這樣的**在執行之後外層迴圈能執行幾次呢?
執行結果
before 0
middle 2
middle 3
after 3
before 1
middle 2
middle 3
after 3
可以看到,外層迴圈也按照正常次數執行,內層的變數 i 沒有影響到外城的執行,雖然在內層執行之後 i 值發生了改變。
仔細想了一下,大致明白了其中的原委。
python不像c++,在c++,中宣告乙個變數需要帶上型別,宣告之後這個變數已經指向了位址空間,二python不需要這樣,python中的變數只是個符號,賦值只是把變數和記憶體位址儲存的物件關聯起來。
上面**中的執行流程可以看成這樣
1 第一次執行 把 0 的位址和 i 關聯起來
2 執行內部迴圈 不斷變換 i 關聯的位址
3 執行第二次外部迴圈 把 1 和 i 關聯起來
那麼同樣的** 在 c中會是什麼輸出呢
**如下
#include int main()
printf("after %d\n", i);
}return 0;
}
輸出如下
before 0
middle 2
middle 3
after 4
通過比較,發現python還是真的與眾不同。
迴圈小問題
if 0 編寫乙個將輸入貼上到輸出,並且將其中多個空格變為乙個,退格符顯示為 b,換行符顯示為 n,製表符顯示為對應轉義字元。endif 0 include include include using namespace std intmain scanf eof in len strlen in ...
pythonfor迴圈教程 for迴圈
for迴圈 它能夠迭代任何序列的項,例如列表或字串。語法 syntax for iterating var in sequence statements s 如果序列包含表示式列表,則首先對其進行求值。然後,將序列中的第一項分配給迭代變數iterating var 接下來,執行語句塊。列表中的每個專...
Python for 迴圈語句
python for迴圈可以遍歷任何序列的專案,如乙個列表或者乙個字串。語法 for迴圈的語法格式如下 for iterating var insequence statements s 流程圖 例項 usr bin python coding utf 8 forletterin python 第乙...