匿名函数
Posted hui2002
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名函数相关的知识,希望对你有一定的参考价值。
“ ” ‘’
1.什么是匿名函数
def定义的是有名函数:特点是可以通过名字重复调用
def func(): # func=函数的内存地址
pass
匿名函数就是没有名字的函数:待点是只能再定义时使用一次
2.为何要用匿名函数
强调:
匿名函数的定义就相当于只产生一个变量在值,而且有绑定任何名字,
所以会在定义完之后就被收回,无法重新使用,只能在定义时使用一次
应用:当某一个功能就使用一次就没有在吃饭的必要了,就应该定义成匿名函数
3. 如何使用匿名函数
lambda x,y:x+y
" " "
# print(lambda x,y:x+y)(1,2)
# print(res)
# def sum2(x,y):
# return x +y
# salaries={
‘egon‘:3000,
‘alex‘:100000000,
‘wupeiqi‘:10000,
}
# nums=[10,-1,11,9,23]
# print(max(nums))
# print(max(salaries.values()))
# key=函数的内存地址:作用是控制max函数的比较值
#def func[k]
# return salaries[k]
# print(max(salaries,key=func))
#1. 将可迭代对象salaries变成迭代器对象iter_obj
# 2. next(iter_obj) 得到一个人名,然后将该人名当作参数传给key指定的函数
# 然后调用函数将函数的返回值当作比较数据
# 3. 比较大小,取出最大值对应的人名
# print(max(salaries,key=lambda k:salaries[k]))
# print(min(salaries,key,=lambda k:salaries[k]))
# sorted排序
# nums=[10,-1,11,9,23]
# print(sorted(nums))
# printnums)
# salaries={
# ‘egon‘:3000,
# ‘alex‘:100000000,
# ‘wupeiqi‘:10000,
# ‘yuanhao‘:2000
# }
# map
names = [‘alex‘, ‘wupeiqi‘,‘yuanhao‘,‘kevin‘,‘hu老师]
# 方式一:手动实现
# new_names=[]
# for name in names:
# new_names.append(name+‘dsb‘)
# print(new_names)
# 方式二列表生成式
new_names = [name + ‘dsb‘for name in names]
# print(new_names)
# 方式三:map+匿名函数
res = map(lambda x:x + ‘bsd‘,names)
#print(res)
# print(list(res))
#reduce
# 方式一:手动实现
# res=0
#for i in renge(101):
# res+=i
# print(res)
#方式二:列表生成式
#print(sum([i for i in range(101)]))
# 方式三:reduce+匿名函数
#form functools import reduce
# print(reduce(lambda x,y:x+y,[i for i in range(101)],100))
# print(reduce(lambda x,y:x+y,[‘h‘,‘e‘,‘l‘,‘o‘],‘---------))
# filter
names=[‘alex_dsb‘,‘wxx_sb‘,‘kevin_sb‘,‘egon‘]
# 方式-——:手动实现
new_names=[]
for names in names:
if name.endswith(‘sb‘):
new_names.append(name)
print(new_names)
#方式三:filter(lambda name:name.endswith(‘sb‘),names)
print(res)
print(list(es))
‘ ’ ‘
#函数弟归
1.什么是函数递归
函数是递归调用是函数嵌套调用的一种特殊形式,
特殊在调用一个函数的过程中又直接或者间接地调用了该函数本身
递归本质就是一个循环的过程,
但是递归必须满足两个原则:
1.每进入下一层递归,问题的规模必须有所减少
2.递归必须有一个明确的结束条件或者说有一个明确的进入下一层递归的条件
并且递归有两个明确的阶段
1.回溯:一层一层地递归调用下去
2.递推:再某一层结束递归,然后一层一层返回
2,为何要用递归:
在某些情况下,基于递归来使用重复的过程比while循环更加简单
3,如何用
’ ‘ ’
# def f1()
# print(‘from f1‘):
# f1()
# def f2():
# print(‘from f2‘)
# f1 ()
# fi()
# def f2():
# print(‘from f2‘)
# f1()
#
#def f1():
# print(‘from f1‘)
# f2()
# f1()
# 递归举例:
# age(5)=age(4)+2
# age(4)=age(3)+2
# age(3)=age(2)+2
# age(2)=age(1)+2
# age(1)=18
# age(n)=age(n-1)+2#n>1
# age(1)=18 #n=1
# def age(n):
# if n = = 1:
# return age(n-1)+2
#
# res=age(5)
# print(res)
# list1=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
# deffunc(l):
# for item in i:
# if type(item) is list:
# # 将item当作一个新列表传给功能本身
# func(item)
# else:
# print(item)
# func(list1)
# 二分法:二分法是算法的一种,算法是如何高新地解决问题的思路
# nums=[1,13,15,23,27,31,33,57,73,81,93,94,97,101] #从小到大排列的数字列表
#
# for num in nums:
# if 58 = = num:
# print(‘find it‘)
# break
# else:
# print(‘not exists‘)
nums=[1,13,15,23,31,33,57,73,81,93,94,97,101] #从小到大的数字
def binary_search(find_num,nums):
print(nums)
if len(nums)
print(‘not exists‘)
return
# 功能
mid_indwx = len(nums)//2
if find_num>nums[mid_index]:
#in the right
nums = nums[mid_index+1:]
# 重新运行功能,传人新列表
binary_search(find_num,nums)
else:
print(‘find it‘)
# binay_search(97,nums)
binary_search(95,nums)
‘ ‘ ‘
以上是关于匿名函数的主要内容,如果未能解决你的问题,请参考以下文章
KotlinDSL 领域特定语言 ① ( apply 标准库函数分析 | 普通匿名函数 | 扩展匿名函数 | 泛型扩展匿名函数 )