[英]How does this for loop work on the following string?
我一直在研究 Al Sweighart 的 Automate the Boring Stuff。 我正在努力理解下面的代碼:
輸入
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
count = {}
for character in message:
count.setdefault(character, 0)
count[character] = count[character] + 1
print(count)
OUTPUT
{'I': 1, 't': 6, ' ': 13, 'w': 2, 'a': 4, 's': 3, 'b': 1, 'r': 5, 'i': 6, 'g': 2, 'h': 3, 'c': 3, 'o': 2, 'l': 3, 'd': 3, 'y': 1, 'n': 4, 'A': 1, 'p': 1, ',': 1, 'e': 5, 'k': 2, '.': 1}
問題
由於調用 for 循環中的變量無關緊要(即字符可以更改為 x、pie 等),代碼如何知道通過字符串中的每個字符運行循環?
這不是關於變量的名稱,而是關於這個變量指向的object 。 Python 虛擬機中的循環實現知道如何根據對象的類型對其進行迭代。
對something
的迭代被實現為對iter(something)
的迭代,這又與對something.__iter__()
。 不同的類實現自己的__iter__
版本,以便循環正常工作。
str.__iter__
遍歷字符串的單個字符, list.__iter__
- 遍歷列表的元素等等。
您可以創建自己的 object 並對其進行迭代:
class MyClass:
def __iter__(self):
return iter([1,2,3,4])
my_object = MyClass()
for x in my_object:
print(x)
這將打印從 1 到 4 的數字。
字符串是 python 中的數組。 所以,這意味着當你循環一個字符串時,你循環每個字符; 在您的情況下,您將已讀取的內容設置為character
。
然后,如果字符尚未在字典中,則 setdefault 將字符映射到 0。 rest 看起來非常簡單。
python 中的字符串是字符序列: https://docs.python.org/3/library/stdtypes.html#textseq 。 因此, for c in m:
行迭代m
序列的每個元素,即字符串的每個字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.