從踩坑學Python內部原理(4):for 循環怎麼會事兒?

2021-03-02 Python開發者

(給Python開發者加星標,提升Python技能)

英文:Satwik Kansal,翻譯:暮晨

Python開發者整理自 GitHub

【導讀】:Python 是一個設計優美的解釋型高級語言,它提供了很多能讓程式設計師感到舒適的功能特性。但有的時候 Python 的一些輸出結果對於初學者來說似乎並不是那麼一目了然。

GitHub 有個倉庫收集 Python 中那些難以理解和鮮為人知的功能特性,並嘗試討論這些現象背後真正的原理!

雖然有些例子並不一定會讓你覺得「臥槽」(WTF),但它們依然有可能會告訴你一些你所不知道的 Python 有趣特性。我覺得這是一種學習程式語言內部原理的好辦法,而且我相信你也會從中獲得樂趣!

如果你是一位經驗比較豐富的 Python 程式設計師,你可以嘗試挑戰看是否能一次就找到例子的正確答案。你可能對其中的一些例子已經比較熟悉了,那這也許能喚起你當年踩這些坑時的甜蜜回憶。

for 循環怎麼會事兒?
some_string = "wtf"
some_dict = {}
for i, some_dict[i] in enumerate(some_string):
    pass

Output:

>>> some_dict # 創建了索引字典.
{0: 'w', 1: 't', 2: 'f'}

說明:

Python 語法[1] 中對 for 的定義是:

for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]

其中 exprlist 指分配目標. 這意味著對可迭代對象中的每一項都會執行類似 {exprlist} = {next_value} 的操作.

一個有趣的例子說明了這一點:

for i in range(4):
    print(i)
    i = 10

Output:

0
1
2
3

你可曾覺得這個循環只會運行一次?

說明:

由於循環在Python中工作方式, 賦值語句 i = 10 並不會影響迭代循環, 在每次迭代開始之前, 迭代器(這裡指 range(4)) 生成的下一個元素就被解包並賦值給目標列表的變量(這裡指 i)了.

在每一次的迭代中, enumerate(some_string) 函數就生成一個新值 i (計數器增加) 並從 some_string 中獲取一個字符. 然後將字典 some_dict 鍵 i (剛剛分配的) 的值設為該字符. 本例中循環的展開可以簡化為:

>>> i, some_dict[i] = (0, 'w')
>>> i, some_dict[i] = (1, 't')
>>> i, some_dict[i] = (2, 'f')
>>> some_dict

參考資料[1]

Python 語法: https://docs.python.org/3/reference/grammar.html

- EOF -

覺得本文對你有幫助?請分享給更多人

推薦關注「Python開發者」,提升Python技能

點讚和在看就是最大的支持❤️

相關焦點

  • 從踩坑學Python內部原理(8):is not 與逗號
    GitHub 有個倉庫收集 Python 中那些難以理解和鮮為人知的功能特性,並嘗試討論這些現象背後真正的原理!雖然有些例子並不一定會讓你覺得「臥槽」(WTF),但它們依然有可能會告訴你一些你所不知道的 Python 有趣特性。
  • 從踩坑學 Python 內部原理(14):​消失的外部變量
    GitHub 有個倉庫收集 Python 中那些難以理解和鮮為人知的功能特性,並嘗試討論這些現象背後真正的原理!雖然有些例子並不一定會讓你覺得「臥槽」(WTF),但它們依然有可能會告訴你一些你所不知道的 Python 有趣特性。
  • Python基礎教程之循環語句的使用
    i = %d" % i)```> 注意:循環結束後,之前定義的計數器條件的數值是依舊存在的#### 死循環> 由於程式設計師的原因,**忘記** 在循環內部 **修改循環的判斷條件**,導致循環持續執行,程序無法終止
  • Python for循環及用法詳解
    圖 1 for 循環語句的執行流程圖下面的程序演示了 for 循環的具體用法:add = "http://c.biancheng.net/python/"#for循環,遍歷 add 字符串for ch in add: print(ch,end="")運行結果為:
  • Python中的for循環
    # 循環允許我們重複執行一個代碼或代碼塊 # python中的循環 # for循環 # while循環 # for循環是一種迭代循環機制,而while循環是條件循環,迭代即重複相同的邏輯操作
  • python循環語句for和while用法-py猜數字小遊戲-學習python第4天
    而python程序遇到循環,重複的問題時,就需要使用python循環語句for-in循環或者while循環來解決。這兩者有什麼區別以及如何使用呢?下面羽憶教程為你解答。這時我們如果採取老辦法,重複寫3600次print("python循環語句")是可以完成任務,但是這樣太枯燥、太乏味,作為程式設計師就應該學會變通,所以就出現了python循環語句,利用python循環語句,一小段代碼可以幫你解決重複輸出3600次的煩惱,可見python循環語句主要是用於解決某些重複的代碼工作。那麼有哪些是python循環語句呢?
  • python:控制流程 - for迭代循環
    >print(i)4.[1, 2, 3, 4][1, 3]第二種 for循環for i in range(1, 6):print(i)>4第二種 continue用法for i in range(1, 21):if i % 5 == 0: continue # 跳出當前循環,進入下一次循環
  • 聊聊python面試這件事兒
  • python:控制流程-while循環
    #一. while循環1.輸出結果: abc第二種 while 循環a = 8while a > 5:print('abc')輸出結果:abcabc……abc解析:while循環,如果沒有中斷條件,會出現不斷循環列印aaa,即死循環。
  • 零基礎學習 Python 之 for 循環語句
    循環( loop )是生活中常見的現象,如每天的日升日落,鬥轉星移,都是循環,程式語言的出現就是為了解決現實中的問題,所以也少不了要循環。>>> my_dict = dict([('name','rocky'),('like','python'),('age',23)])>>> my_dict{'age': 23, 'name': 'rocky', 'like': 'python'}>>> for k in my_dict:...
  • python while循環、數據類型
    1.方法1、嵌套將一系列字典存儲在列表中,或將列表作為值存儲在字典中,這成為嵌套2、range(數字)返回一系列數字,設定循環多少次3、append()末尾添加4、items()以列表的形式返回可遍歷的(鍵值)元組數值。
  • Python while循環語句詳解
    這是因為,當循環至 num 的值為 100 時,此時條件表達式為假(100<100),當然就不會再去執行代碼塊中的語句,因此不會輸出 100。注意,在使用 while 循環時,一定要保證循環條件有變成假的時候,否則這個循環將成為一個死循環。
  • Python基礎知識儲備,與眾不同的for循環
    for循環在循環中很流行,寫法簡單,應用於預先知道循環次數的場景。python循環for循環語法結構for <variable>變量 in < sequence >字符串,列表,元組,字典,集合< statements >
  • Python 探針實現原理
    本文呢,將簡單講述一下 Python 探針的實現原理。同時為了驗證這個原理,我們也會一起來實現一個簡單的統計指定函數執行時間的探針程序。關於 sys.meta_path 更詳細的資料請查閱 python 文檔中 sys.meta_path 相關內容以及 PEP 0302 。
  • Python入門,for循環
    for語句比較簡單,就是定義好變量I(變量可以隨意定義),但是range是不可以變得,range(start, stop[,step]) 是python的一個內置函數。 range() 函數可創建一個整數列表,一般用在 for 循環中。
  • python遞歸算法(上)
    什麼是遞歸在函數內部,是可以調用其他函數的。如果一個函數在內部調用自身,就稱這個函數就是遞歸函數。舉個例子:實現一個可以自定義重複列印你好的函數。要實現重複列印,可能我們立馬就會想到使用循環。如果要求不能使用循環呢,那我們就可以通過下面的方法來實現。原理很好理解,就是不斷的調用自身,如果前面不加上if條件判斷,理論上是會陷入死循環的,但是實際上遞歸到一定次數(最大遞歸次數)就會報錯停止。
  • Python基礎知識儲備,如何開關一個while循環
    python開發一、循環的三要素雖然循環是反覆的執行某個動作,但是循環也會停止的,沒有停止的循環就是死循環;程序如果寫出死循環比如輸入6,求出1+2+3+4+5+6分析:循環變量:i = 1循環體:每次把循環的變量進行累加,並存儲在sum中循環滿足條件:i <= input number ,必須要存在循環的漸變標記(每次只需一次循環,
  • 深入剖析with的內部原理-異常處理的神器
    閱讀本文大概需要8分鐘        Python中有一個非常神奇的關鍵字叫with,打開文件用完之後我們要記得關閉,若我們的代碼在運行過程中發生了異常,導致關閉文件的代碼沒有被執行到,腫麼辦,有小夥伴會說我們有 try..finally塊啊,有沒有更簡單的方便的方案:有
  • WTF Python:有趣且鮮為人知的Python特性
    這個有趣的項目意在收集 Python 中那些難以理解和反人類直覺的例子以及鮮為人知的功能特性,並嘗試討論這些現象背後真正的原理!雖然下面的有些例子並不一定會讓你覺得 WTFs,但它們依然有可能會告訴你一些你所不知道的 Python 有趣特性。我覺得這是一種學習程式語言內部原理的好辦法,而且我相信你也會從中獲得樂趣!
  • Python基礎篇-13 Python不是內部或外部命令的解決方法
    第一章 Python編程基礎----Python不是內部或外部命令的解決方法安裝 Python 環境沒有問題的讀者,可直接跳過本節,繼續閱讀後續文章。有些讀者,在命令行窗口(Linux 稱為終端)中輸出 python 命令後,卻顯示「『python』不是內部或外部命令,也不是可運行的程序或批處理文件」,如圖 1 所示: