一、生成式
列表生成式
列表生成式就是一个用来生成列表的特定语法形式的表达式。
是Python提供的一种生成列表的简洁形式, 可快速生成一个新的list。
列表生成式实例
- 生成一个2n+1的数字列表,n为从3到11的数字。具体实现如下:
nums_list = [2 * n + 1 for n in range(3, 12)]
print(nums_list)
2. 求以r为半径的圆的面积和周长(r的范围从1到10)。具体实现如下:
import math
circle = [(math.pi * (r ** 2), 2 * math.pi * r) for r in range(1, 11)]
print(circle)
3. 求1-50所有数的平方
square = [(i + 1) ** 2 for i in range(50)]
print(square)
4. 找出1~100之间所有奇数, 并且返回一个列表。如果能被3整除, 返回返回该数的平方,
否则返回该数的三次方 。
nums = [num ** 2 if num % 3 == 0 else num ** 3 for num in range(1, 101, 2)]
print(nums)
集合生成式和字典生成式
用来快速生成集合和字典
字典生成式应用实例
1). 将字典的key值和value值调换。
d= {'a':'dog','b':'cat','c':'boy'}
print({value:key for key,value in d.items() })
2). 大小写计数合并 : 已知字典{‘A’:2, ‘a’:5,‘b’:10, ‘c’:4,‘c’:6}, 合并后为{‘a’:7, ‘b’:10,‘c’:10}
key值最终全部为小写.
d= {
'A':2,'a':5,'b':10,'c':4,'C':6
}
# 合并字典; d.get(key.lower(), 0), 如果key'值不存在,默认返回0;
dict_result = {key.lower():d.get(key.lower(), 0) + d.get(key.upper(), 0)for key, value in d.items()}
print(dict_result)
3). 假设有20个学生,学生分数在60-100之间,筛选出成绩在90分以上的学生。
import random
stuInfo = {'student'+str(i):random.randint(60,100) for i in range(20)}
print({name:score for name,score in stuInfo.items() if score >90})
二、生成器
在Python中,一边循环一边计算的机制,称为生成器:Generator。
如何创建生成器?
第一种方法: 列表生成式的改写以及生成器的for循环查看。 []改成()
第二种方法: yield关键字。
如果函数里面有yield关键字, 这个函数的返回值是生成器
如果遇到yield, 函数停止执行, 当再次调用next方法时, 从停止的地方继续执行;
这里我们测试一下yield的工作机制:
def fun():
print('1')
yield 2 # 图国函数里面遇到return, 函数就执行结束;
print('3')
yield 4
result = fun()
# # 默认next方法会发yield后面的值返回回来;
print(next(result))
print("函数停止位置")
print(next(result))
生成器的查看有两种方式。一种实上边提到的for遍历查看。另一种就是使用next方法查看,next方法可以一个一个打印出来。
生成器的特点是什么?
- 节约内存
- 迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是
说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新
创建的。