一、词频统计练习
"""
技能需求:
1. 文件操作
2. 字符串的分割操作
3. 字典操作
功能需求:词频统计
1. 读取song.txt文件 with open(filename) as f: content=f.read()
2. 分析文件中的每一个单词,统计每个单词出现的次数。{"hello":2, "python":1, "java":1}
- 分析文件中的每一个单词
content = "hello python hello java"
words = content.split()
- 统计每个单词出现的次数- {"hello":2, "python":1, "java":1}
# words = ['hello', 'python', 'hello', 'java']
3. 获取出现次数最多的5个单词
"""
# 1. 加载文件中所有的单词
with open('doc/song.txt') as f:
words = f.read().split()
# 2. 统计
from collections import Counter
counter = Counter(words)
result = counter.most_common(5)
print(result)
# # 2. 统计
# result = {}
# for word in words:
# if word in result:
# # result[word] = result[word] + 1
# result[word] += 1
# else:
# result[word] = 1
#
# # *小拓展: 友好打印信息
# import pprint
# pprint.pprint(result)
执行结果如下所示:
二、生成式与生成器
1.生成式
# 需求: 生成100个验证码(4个字母组成的验证码)
import string
import random
codes = []
for count in range(100):
code = "".join(random.sample(string.ascii_letters, 4))
codes.append(code)
print(codes)
# 列表生成式优化版
codes = ["".join(random.sample(string.ascii_letters, 4)) for i in range(100)]
print(codes)
# 需求: 找出1-100之间可以被3整除的数。
nums = []
for num in range(1, 101):
if num % 3 == 0:
nums.append(num)
print(nums)
# 优化版
nums = [num for num in range(1, 101) if num % 3 == 0]
print(nums)
# 集合生成式
result = {i**2 for i in range(10)}
print(result)
# 字典生成式
result = {i:i**2 for i in range(10)}
print(result)
执行结果如下所示:
2.生成器
# 生成器实现的第一种方法: 将生成式改写成生成器
nums = (i**2 for i in range(10000))
# 生成器实现的第2种方法:yield关键字
# return: 函数遇到return就返回,return后面的代码并不会执行。
# yield:遇到yield则停止执行代码, 当再次调用next方法时,会从上次停止的地方继续执行,遇到yield停止。。。。
def login():
print('step 1') # 'step 1'
yield 1 # output 1
print('step 2')
yield 2
print('step 3')
yield 3
# 如果函数里面有yield关键字,函数的返回值就是一个生成器
g = login()
print(next(g))
print(next(g))
执行结果如下所示:
三、闭包
# import time
# start_time = time.time() # 时间戳:从1970年1.1到现在经历的秒数
# time.sleep(2)
# end_time = time.time() # 时间戳:从1970年1.1到现在经历的秒数
# print(end_time-start_time)
# 闭包:
# 1. 函数里面嵌套函数
# 2. 外部函数的返回值是内部函数的引用
# 3. 内部函数可以使用外部函数的变量
def timeit(name):
def wrapper():
print('wrapper ' + name)
print('timeit')
return wrapper
in_fun = timeit(name='westos') # wrapper函数, in_fun实质上就是wrapper函数
in_fun()
执行如下: