Python--day15(生成器send方法、递归函数、匿名函数、内置函数)

今日主要内容

1.  生成器的send方法   (l)

2.  递归:函数自己调自己

3.  匿名函数

4.  内置函数

1.  生成器send方法

send的工作原理

1.  send发送信息给当前停止的yield

2.  再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止

persons = ['张三','李四','王五','赵六','钱七']

def order(persons):
for i in range(len(persons)):
if i == 0:
print('%s在面试' % persons[0])
else:
print('%s叫%s去面试' % (name, persons[i]))
print('%s面试完毕' % persons[i])
name = yield persons[i]

obj = order(persons)
for i in range(len(persons)):
if i == 0:
p = obj.__next__()
else:
p = obj.send(p)

==>>>>>

张三在面试
张三面试完毕
张三叫李四去面试
李四面试完毕
李四叫王五去面试
王五面试完毕
王五叫赵六去面试
赵六面试完毕
赵六叫钱七去面试
钱七面试完毕

2.  递归

递归:函数直接或者间接调用本身,都称之为递归

回溯:找寻答案的过程

递推:推出结果的过程

前提条件:1.  递归必须有出口        2.  递归回溯递推的条件一定有规律

递归调用一次次调用下去,说白了就是一个重复的过程,但需要注意的是每一次重复问题的规模都应该有所减少,知道得到一个最终的结果,所以递归在回溯阶段要有一个明确的结束条件

# 案例一 获得第count个人的年龄
def get_age(count):
if count == 1:
return 20
age = get_age(count - 1) - 2 # age(n) = age(n-1) - 2
return age

print(get_age(5)) # 12


# 案例二 求n的阶乘 n! = n * (n - 1)!
def jiecheng(n):
if n == 1 or n == 0:
return 1
ji = jiecheng(n - 1) * n
return ji


print(jiecheng(5)) # 120
 
 

3.  匿名函数

3.1  匿名函数:

1.  匿名函数没有函数名

2.  匿名函数的关键字采用lambda

3.  关键字: lambda与标识函数体功能 :之间一定是参数,所以省略()

4.  匿名还没有函数体,只有返回值,所以函数体和返回值的return关键字省略了

3.2  匿名函数的基本格式:lambda *args,**kwargs:"返回值"

【注意】

1.  参数的使用和有名函数一样,六种形参都支持

2.  返回值必须明确成一个值,可以单个值对象,也可以为一个容器对象

错误示范:

a = lambda *args,**kwargs: '返回值1','返回值2'
print(a) # (<function <lambda> at 0x0000024B27DB9950>, '返回值2')


正确示范:

a = lambda *args,**kwargs: ('返回值1','返回值2' )
print(a) # <function <lambda> at 0x000001E8B1A099D8>

3.3  max函数原理

基本格式:

dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
}
def func(k):
# return k # zero
# return dic[k][0] # tom
# return dic[k][1] # owen
res = max(dic,key = func)
print(res)

max函数:通过max函数的key参数来改变max函数的比较依据

运行原理:max函数会"for循环"出一个值,然后将该值传key指定的函数

调用key指定的函数,将拿到的返回值当作比较依据

3.4  max结合匿名工作

1.  max内部会遍历iter(可迭代对象),将遍历结果一一传给lambda的参数x

2.  依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值

3.  对外返回最大的遍历值

dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
}
print(max(dic,key = lambda k:k)) # 求名字最大 zero
print(max(dic,key = lambda k: dic[k][0] )) # 求员工编号最大 tom
print(max(dic,key = lambda k: dic[k][1] )) # 求薪资最大 owen

4.  常用的内置函数

  map函数:把一个列表按照我们自定义的映射规则映射成一个新的列表

res = map(lambda k: k * 2, [3,1,2])  # 将遍历结果映射成任意类型
print(list(res)) # [6, 2, 4]

res = map(lambda k: k + '123',['wangyong','qwer'])
print(list(res)) # ['wangyong123', 'qwer123']

dic = {
'owen': 3,
'zero': 5
}
res = map(lambda k:(k,dic[k]),dic)
print(list(res)) # [('owen', 3), ('zero', 5)]

reduce函数:把多个值合并成一个结果

from functools import reduce
print(reduce(lambda x, y: x * y, [3, 5, 2])) # 30


sorted函数:排序

res = sorted(dic,key=lambda k: dic[k][1], reverse=True)
print(res) # ['owen', 'tom', 'zero']

猜你喜欢

转载自www.cnblogs.com/wangyong123/p/10797037.html