Python的for迴圈究竟是什麼回事兒

2022-06-08 06:27:09 字數 1299 閱讀 3719

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 # 建立了索引字典.

說明:python 語法[1] 中對 for 的定義是:

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

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

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

for i in range(4):

print(i)

i = 10

output:

012

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

Bundle 究竟是什麼?

bundle用於場景 在我印象中比較深刻的是,一般用於activity之間傳遞數值,也用於handler傳送訊息,如下 intent intent new intent bundle bundle new bundle bundle.putstring key value intent.putext...

究竟是內省還是內省

下面我們就對內省做一下簡單介紹 通過propertydescriptor類操作bean的屬性 通過introspector類獲得bean物件的 beaninfo,然後通過 beaninfo 來獲取屬性的描述器 propertydescriptor 通過這個屬性描述器就可以獲取某個屬性對應的 gett...

蛋糕究竟是怎樣做大的

可能是太窮了吧,不是有個段子說月薪 10w 的在思考如何讓公司變得更好 效率更高 方向不偏,而月薪兩千的在思考敘利亞中東的局勢及其地緣政治。有時候總是會想,我們現在社會很多東西比如計算機 航天 遊戲 網購等等都沒必要啊,吃飯才是最底層的需求,其它的感覺都比較虛的樣子,那吃飯的需求就這麼多,究竟是怎麼...