1. 程式人生 > >《流暢的python》示例3-2加註釋

《流暢的python》示例3-2加註釋

index = {}
#compile 函式用於編譯正則表示式,生成一個正則表示式( Pattern )物件(re.RegexObject物件),
# 供 match() 和 search() 這兩個函式使用
WORD_RE = re.compile(r'\w+')#不轉義使用真實字元例如r'\t'就是輸出\t否則是一個製表符
with open('test.txt',encoding='utf8') as fp:
    #將一個可遍歷的資料物件組合為一個索引序列,同時列出資料和資料下標
    # seasons = ['Spring', 'Summer', 'Fall', 'Winter']
    # list(enumerate(seasons))
    # [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    # list(enumerate(seasons, start=1))  # 小標從 1 開始
    # [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
    for line_no,line in enumerate(fp,1):
        #和findall 類似,在字串中找到正則表示式所匹配的所有子串,並把它們作為一個迭代器返回
        #迭代器生成的是re.MatchObject物件
        #在字串中找到正則表示式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
        for match in WORD_RE.finditer(line):
            #re.MatchObject的group() 返回被 RE 匹配的字串。
            word = match.group()
            column_no = match.start()+1
            location = (line_no,column_no)
            # d = index.get(word,[])
            # d.append(location)
            # index[word] = d
            # setdefault().append()的作用與上面註釋掉的三句話是一樣的
            index.setdefault(word,[]).append(location)
# sorted(iterable[, cmp[, key[, reverse]]])
# iterable -- 可迭代物件。
# cmp -- 自定義比較函式,這個具有兩個引數,引數的值都是從可迭代物件中取出,此函式必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。預設值為None。
# key -- 指定一個函式,該函式只有一個引數。這個函式用於從Iterable中每個元素中提取一個用於比較的關鍵字。預設值為None。
# reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(預設)。
for word in sorted(index,key=str.upper):
    print(word,index[word])