《流畅的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])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值