三元表达式
三元表达式:
x=10
y=20
print(x if x>y else y)
列表推导式
列表推导式又名列表解析式
通过简明扼要的方式来创建列表,也可以使用if语句来控制创建列表
lt=[x for x in range(1,5)]
lt=[1,2,3,4]
通过if创建列表
lt=[x*y for x in range(1,5) if x>2 for y in range(1,4) if y<3]
print(lt)
相当于:
for x in range(1,5)
if x > 2
for y in range(1,4)
if y < 3
x*y
字典生成式
可以通过字典生成器的方式快速生成字典
#通过zip函数压缩生成
lt=['a','b','c','d']
lt2=[1,2,3,4]
z=zip(lt,lt2)
dic={x:j for x,j in z}
print(dic)
#或者直接通过生成式生成
dic={chr(x):x for x in range(97,101)}
字典生成式使用if...else
dic={chr(x):x*2 if x%2==1 else x for x in range(97,101) }
print(dic)
生成器
yield:
在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。
def yi():
x=1
while x<100:
x += 1
yield x
f=yi()
for i in f:
print(i)
匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda [arg1 [,arg2,.....argn]]:expression
匿名函数没有名字,使用一次就收回
c = lambda x,y,z: x*y*z
a=c(2,3,4)
print(a)
与内置函数的联动
匿名函数一般与max()、sorted()、filter()、map()方法联动
与max()联动
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
a=max(salary_dict, key=lambda name:salary_dict[name])
print(a)
与min()联动
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
a=min(salary_dict, key=lambda name:salary_dict[name])
print(a)
与sorted()联动
llt={'a':'2','b':'1','c':'3','d':'9','g':'5'}
ll=list(llt.items())
print(ll)
ll.sort(key= lambda i: i[1])
print(ll)
ll=sorted(ll ,key=lambda i:i[0])
print(ll)
filter()工作原理:
用于筛选
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下。
map()
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。