高阶函数
函数作参数
# 对于函数function,需要用()才是函数调用,单个函数名为函数本身
# 函数没有像Java的反射的概念,function为函数本身,function(参数)为函数调用
def func(x,a):
return x(a)
func(abs,-12)
12
# 能够获取函数本身后就可以将函数作为变量进行传递
def add(*args):
return sum(args)
def math(function,*args):
return function(*args)
math(add,1,2,3)
6
map()函数
# Python内建了map()和reduce()函数
# map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def add(a):
return a**2
map_add=map(add,[1,2,3,4])
for i in map_add:
print(i)
1
4
9
16
reduce()函数
# reduce()函数把一个函数作用在一个序列上
def add1(x,y):
return x+y
reduce_add=reduce(add,[1,2,3,4])
print(reduce_add)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_12684/1983324346.py in <module>
3 def add1(x,y):
4 return x+y
----> 5 reduce_add=reduce(add1,[1,2,3,4])
6 print(reduce_add)
NameError: name 'reduce' is not defined
from functools import reduce
def add1(x,y):
return x+y
reduce_add=reduce(add1,[1,2,3,4])
print(reduce_add)
10
filter()函数
# filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
def select(a):
return a%2==0
list_one=[1,2,3,4,5,6,7,8,9,10]
list_two=filter(select,list_one)
for i in list_two:
print(i,end=" ")
2 4 6 8 10
sorted()函数
# sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序.
list_three=sorted([9,8,7,6,5])
for i in list_three:
print(i,end=" ")
5 6 7 8 9
函数作返回值
# 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。
def add(*args):
print(sum(args))
def delete(x,y):
print(x-y)
def math(function_name):
if function_name==add:
return add
elif function_name==delete:
return delete
else:
return "None Function Nmae"
math(add)(1,2,3)
6
匿名函数lambda
# 传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
# 匿名函数lambda x: x * x,y实际上就是: 关键字lambda表示匿名函数,冒号前面的x表示函数参数,后面为逻辑,y为实参
# 匿名只能是一个表达式,返回值就是该表达式的结果。也可以作复制给变量
x=lambda x,y:x+y
print(x)
y=lambda x: sum(x) ,[1,2,3]
print(y)
print(lambda x:x**2,[2,4,8])
<function <lambda> at 0x0000020362785F70>
(<function <lambda> at 0x00000203626AD820>, [1, 2, 3])
<function <lambda> at 0x0000020362785550> [2, 4, 8]
装饰器
# 代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)
@log
def now():
print('2015-3-25')
# @log就是一个装饰器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/156286.html