python基础之推导式及匿名函数和高阶函数

推导式

推导式:做一些有规律的数据结构

列表推导式:

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))

lambdadef是一样的 定义函数

a,b(a,b)是一样的 形参

返回值 :a+breturn 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]

猜你喜欢

转载自www.cnblogs.com/zzsy/p/12219673.html