《流暢的python》示例3-2加註釋
阿新 • • 發佈:2018-10-31
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])