匿名函数 递归 二分法 面向过程编程


什么是匿名函数?
def定义的是有名函数:
def func():#func=函数的内存地址
pass

匿名函数就是没有名字的函数:特点是只能在定义的时候使用一次


为什么要用匿名函数?
定义:
匿名函数的定义就是相当于只产生一个变量的值,而没有绑定任何名字
所以会在定义完成惠普被回收,无法重复使用,只能在定义时候使用一次
应用:
当某一个功能仅仅使用一次就没有再重复使用的必要了,就应该定义称匿名函数

如何使用匿名函数( def sum2(x,y)
return x+y )
lambda x,y:x+y
调用(lambda x,y:x+y)(1,2)

举例:
salaries={'egon':3000,
'alex':100000,
'wupeiqi':10000,
'yuanhao':2000
}
#比较出字典中薪资最高的人的名字

#key=函数的内存地址:作用是控制max函数的比较的值
# def func(k):
# return salaries[k]
# print(max(salaries,key=func))
#将可迭代对象salaries百年城迭代器对象iter_obj
#next(iter_obj)得到一个人名,然后将该人名当参数传给key制定的函数,
# 然后调用函数,将函数的返回值当作比较依据
print(max(salaries,key=lambda k:salaries[k]))


#map 添加,映射成新值
names=['alex','wupeiqi','yuanxiao','kevin','hu老师']
names_new=[]
#方法1.手动实现 for循环
for name in names:
names_new.append(name+'dss')
print(names_new)
#方法2.列表生成式
names_new=[name+'abs'for name in names]
print(names_new)
#方法3.map+匿名函数
res=map(lambda x:x+'dds',names)
print(list(res))

#redce相加
#方法1.手动实现 for循环
res=0
for i in range(101):
res+=i
print(res)
#方法2.列表生成式
print(sum([i for i in range(101)]))
#方法3.map+匿名函数
from functools import reduce
reduce(lambda x,y:x+y,[i for i in range(101)],100)#此时初始值101
reduce(lambda x,y:x+y,[i for i in range(101)])#此时初始值是range的第一个值


#filter过滤
names=['alex_sb','wupeiqi','yuanxiao_sb','kevin','hu老师']
#方法1.手动实现 for循环
for name in names:
if name.endswith('sb'):
names_new.append(name)
print(names_new)
#方法2.列表生成式
names_new=[name for name in names if name.endswith('sb')]
print(names_new)

#方法3.map+匿名函数(可迭代器对象)
res=filter(lambda name:name.endswith('sb'),names)
print(list(res))




什么是函数的递归调用?
函数的递归调用是函数嵌套调用的一种特殊形式,
特殊在调用函数的过程中有直接或间接的调用了该函数本身
递归本质就是一个循环的过程,但是递归必须满足两个原则
1.每次进入下一层递归,问题的规模必须有所减少
2.递归必须要有一个明确的结束条件或者说有一个明确的进入下一层递归的条件,
并且递归有两个明确的阶段
1.回溯:一层一层的递归调用下去
2.递推:在耨一层结束掉递归,然后一层一层的返回

为什么要使用递归调用?
在就某些情况下,基于递归调用会比while循环更简单好用一些

如何要用递归调用?
例子:
list1=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
list_11=[]
def age(l):
for i in l :
if type(i) is list:
return age(i)
else:
list_11.append(i)
print(list_11)
print(age(list1))



二分法:二分法是算法的一种,可以有效的找寻有序列表中的数字
举例子:
nums=[1,3,6,9,14,56,88,99]
def run(i,nums):
if len(nums)==0:
print('jjj')
return
mid=len(nums)//2
if i>nums[len(nums)//2]:
nums=nums[mid+1:]
run(i,nums)
if i<nums[len(nums)//2]:
nums=nums[:mid]
run(i,nums)
else:
print('yy')
run(14,nums)





面想过程编程:
核心是过程而子,过程是指解决问题的步骤,即先干什么再干什么后干什么...
基于该思想编写的程序脑子里应该始终思考过程二字,就奥比再设计一条流水
线,是一种机械式的思维方式

优点:复杂的问题的流程化,进而简单化
缺点:扩展性差

原文地址:https://www.cnblogs.com/yanhui1995/p/9766472.html