推导式:做一些有规律的数据结构
1.普通循环
print([i for i in range(1,51)])
[加工后的变量 for 循环]
print([f "学习python{i}天" for i in range(1,51))
2.筛选模式
print([i for i in range(1,51) if i > 25])
print([i+j for i in range(2) for j in range(2)])
1.普通循环
{键:值 for 循环}
print({i:i+1 for i in range(3) if i > 1})
print(f"Python{i}":f"DAY{i+1}" for i in range(3)})
输出:{'Python0': 'DAY1', 'Python1': 'DAY2', 'Python2': 'DAY3'}
2.筛选模式
{加工后的变量:加工后的变量 for循环 加工条件}
print({i:i+1 for i in range(3) if i > 1})
1.普通循环
{变量 for 循环}
print({i for i in range(3)})
2.筛选模式
{加工后的变量 for循环 加工条件}
print({i for i in range(3) if i >2})
1.普通模式
g = (i for i in range(3))
#print(next(g))
#print(next(g))
#print(next(g))
2.筛选模式
g = (i for i in range(3) if i+1 ==2)
#print(next(g))
#print(next(g))
推导式:简化代码,提供逼格,提高可读性
生成一些有规律的数据,生成的数据较大时建议使用生成器推导式
例子:找到S字符串中有几个e
普通写法:
s = "alex,meet"
for i in s:
if i=="e":
print(count)
count += 1
推导式写法:print([i for i in range(len(s)) if s[i] =="e"])
例子2 找到names中带e的
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
普通写法:
for i in names:
for em in i:
if"e" in em:
print(em)
推导式写法:print([em for i in names for em in i if "e" in em])
匿名函数:一句话函数
匿名函数的名字叫做lambda
匿名函数的编写格式:
f = lambada a,b:a+b
# def func(a,b):
# c = a + b
# return c
# print(func(1,2))
lambda
和 def
是一样的 定义函数
a,b
和(a,b)
是一样的 形参
返回值 :a+b
和 return a+b
是一样的
形参 :能接受位置参数,动态位置参数(*args)
,默认参数,动态关键字参数(**kwargs)
,可以不写
返回值:只能返回一个数据,必须写,如果是多个数据需要带括号
f = lambda x,y:(x,y,x+y)
print(f(1,2)) 输出结果(1,2,3)
f = lambda x:(x[0],x[2]) 也可以索引
print(func("asdasdas"))
f = lambda x,y:x if x>y else y 后边也可以跟条件
print(f(3,122)) 结果122
g=(lambda i:i+1 for j in range(3)) 带括号的是生成器
print([em(3)for em in g]) [4,4,4] for j in range(3)创建三个生成器,for em in g循环三个生成器,传参3,结果是[4,4,4]
g=[lambda :i+1 for i in range(3)] for i in range(3) 创建三个lambda匿名函数,pirnt(g) 是三个匿名函数内存地址,存放在g这个列表中
print([em() for em in g]) [3,3,3] 循环每个lambda 由于创建完三个lambda,i的值停留最后一个,所以
i的值是2,故2+1 调用三次函数 结果[3,3,3]
原文:https://www.cnblogs.com/zzsy/p/12219673.html