Python函数进阶
三元表达式/列表推导式/字典生成式 只是让你的代码少一些,但是逻辑没发生变化
三元表达式
# 三元表达式只支持双分支结构
name = 'apple'
print('red') if name == 'apple' else print('blue')
red
列表推导式
lt = [i ** 2 for i in range(10)]
print(lt)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
字典生成式
# 字典生成式一般与zip连用
z = zip(['a','b','c','d'],[1,2,3,4]) #压缩方法,Python解释器的内置方法
dic = {k:v**2 for k,v in z}
print(dic)
{'a': 1, 'b': 4, 'c': 9, 'd': 16
生成器
#生成器:自定义迭代器,生成器就是迭代器(自己造出来的)
#yield关键字的三个特性
#1.yield可以把函数变成生成器(自定制的迭代器对象,具有__iter__和__next__方法)
#2.yield可以停止函数,再下一次next再次运行yield下面的代码
#3.有n个yield生成器就有n个元素,就可以next n次,第n+1次next会报错
# 自定义一个range()函数
def range(x,y,z): #普通版
while x < y:
yield x
x += z
def range(*args, step = 1): #通用版
args = list(args)
if len(args) == 1:
count = 0
while count < args[0]:
yield count
count += step
elif len(args) == 2:
while args[0] < args[1]:
yield args[0]
args[0] += step
匿名函数
#匿名函数需要关键字 lambda
#lambda 参数:<代码块>
f = lambda x: x+1
res = f(1)
print(res) # 2
# 匿名函数一般不单独使用,和filter()/map()/sorted()/列表sort()内置方法联用
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
salary_list = list(salary_dict.items())
new_salary_list = sorted(salary_list, key=lambda i: i[1], reverse=True) # 重新创建一个新的列表进行排序
print(new_salary_list)
#[('jason', 100000), ('tank', 5000), ('nick', 3000), ('sean', 2000)]