列表生成式
案例
# 需求: 生成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, type(result))
生成器
定义 在Python中,一边循环一边计算的机制,称为生成器:generator。 面对大文件的时候,可以节省内存。
nums = [i ** 2 for i in range(100000)]
在面对这样的计算次数比较多的时候,电脑的资源占用比较严重,计算有一定的时间(仅仅只需要知道前几个的数值) 此时可以使用生成器
# 生成器实现的第一种方法:将生成式改写成生成器
nums = (i ** 2 for i in range(100000))
print(next(nums))
print(next(nums))
print(next(nums))
生成器实现的第2种方法:yield关键字
# 生成器实现的第2种方法:yield关键字
# return:函数遇见return就返回,return后面的代码并不会执行。
# yield:函数遇见yield则停止执行代码,当再次调用next方法时,会从上次停止的地方继续执行,遇见yield停止。
def login():
print('step 1')
yield 1
print('step 2')
yield 2
print('step 3')
yield 3
# 如果函数里面有yield关键字,函数的返回值就是一个生成器
g = login()
print(next(g))
print(next(g))
|