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)]
原文地址:https://www.cnblogs.com/michealjy/p/11348551.html