今天主要讲三大部分内容:
一、匿名函数
二、函数递归与二分法
三、面向过程编程
一、匿名函数:
1.什么是匿名函数
相对于有名函数,用def func():命名,且能够被多次调用,匿名函数没有被命名且在 定义时使用一次
2.为何要用匿名函数
匿名函数在定义时没用被命名,在调用之后就会被回收,无法再次使用,作用是当某一功 能仅使用一次就没有重复使用的必要时就应该使用匿名函数
3.匿名函数的使用
lambda x,y:x+y
res=(lambda x,y:x+y)(1,2)
print(res)
max示范:
salaries={
’egon‘:3000
’alex‘:100000
’wupeiqi‘:10000
}
print(max(salaries,key=lambda k:salaries[k]))
max指定key以后的工作原理:
1.把可迭代对象字典编程迭代器对象iter_obj
2.next(iter_obj)得到一个人名,然后当做参数传值给key的函数,然后调用函数将返 回值对应values做比较
3.比较大小后,取出最大值对应的人名
sorted排序示范
salaries={
’egon‘:3000
’alex‘:100000
’wupeiqi‘:10000
}
print(sorted(salaries,key=lambda k: salaries[k]))从小到大
print(sorted(salaries,key=lambda k:salaries[k],reverse=True))从大到小
map示范
name=['alex','wupeqi','yuanhao']
res=map(lambda x:x+’dsb‘,names)
print(res)
print(list(res))
reduce示范
1-100以内加总数和
print(reduce(lambda x,y:x+y ,[i for i in range(100)]))
filter(过滤器)示范:
names=['alex_dsb','wxx_sb','kevin_sb','egon']
res=filter(lambda name:name.endswith('sb'),names)
print(list(res))
二、函数递归与二分法
1.什么是函数递归
函数递归是函数嵌套调用的一种特殊形式
是函数直接和间接的自我调用
递归本身是一个循环的过程:
每次递归必须遵循两个原则:
1,递归一次后,问题的条件减少
2.必须有一个明确结束递归的条件或者进入下一层的条件
每次递归必须要有两个阶段:
1.回溯:一层一层的递归下去
2.递推:在某一层触发结束条件,一层一层返回
2.为何要用递归
在某些循环情况下,递归要比while循环简洁、简单
3.如何用递归
list1=[1,[2,[3,[4,[5,[6,[7,[8[9,]]]]]]]]]
def func(1):
for item in l:
if type (item) is list:
func(item)
else:
print(item)
func(list)
4.二分法
二分法是算法的一种,算法是如何高效的解决问题的思路的
nums=[1,2,3,4,5,6,7,8,9]
def binary_search(find_bun,num):
print(nums)
if len(nums)==0
print('not exists')
return
mid_index=len(nums)//2 #功能
if find_num>nums[mid_index]:#在右边
nums==nums[mid_index+1:]#重新运行功能,传入新列表
binary_search(find_num,nums)
elif find_num<nums[mid_index]:#在左边
nums=nums[:mid_index]:#重新运行功能,传入新列表
binary_search(find_num,nums)
else:
print(’find it')
binary_search(97,nums)
三、面向过程编程
核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么...
基于该思想编写程序脑子里应该始终思考过程二字,就好比在设计一条流水线,是一种
机械式的思维方式
缺点:扩展性差