python学习-高阶函数(函数传参、返回函数(闭包)、匿名函数lambda)
2020-06-28 04:59
106 查看
文章目录
高阶函数
定义:
至少满足下列一个条件:
- 接受一个或多个函数作为输入
- 输出一个函数
python里的高阶函数有 filter、map、reduce、sorted、匿名函数lambda等
函数传参
顾名思义就是把一个函数作为参数传到另一个函数中,也不复杂,直接上代码:
def test1(x, func): return func(x) print(test1([1, 2, 3, 4, 5], sum))
这是一个很简单的示例,sum函数作为参数传入test1函数。
返回函数(闭包)
在函数中定义了另一个函数,并且把定义的函数作为返回值返回出去,在外部调用。
def mySum(*args): def sum(): sum1 = 0 for i in args: sum1 = sum1 + i return sum1 return sum func1 = mySum(1, 2, 3, 4, 5) print(func1) print(func1())
从代码中能够看出,如果直接调用func1,打印的是函数的地址。
所以需要像调用函数一样去执行 :func1(),才能打印结果。
匿名函数lambda
python使用lambda来创建匿名函数
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。
- 只能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
lambda [arg1 [,arg2,…argn]]:expression
lambda 参数列表:return [表达式] 变量
由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收
划重点:
在Python3里,map返回的结果是迭代器(iterator),因此需要先转换为列表list,再print输出。
rst = map(lambda x: x ** x, [y for y in range(5)]) print(rst, type(rst)) print(list(rst)) squares = list(map(lambda x: x**2, range(10))) print(squares)
释疑
有些文章里面说lambda能够提高运行效率,一篇博文里面对此进行了验证
我没有进行试验,不过从结果看出来,其实效率没什么差别。
还有其他用法:
比如把lambda赋值给一个变量,然后像函数一样调用。
rst2 = lambda x, y, z: x * y * z print() print(rst2(2, 3, 4)) tup = [(1, "a"), (8, "r"), (3, "e"), (4, "b")] print() print(sorted(tup, key=lambda x: x[0])) print() print(sorted(tup, key=lambda x: x[1])) print()
对元组进行排序,lambda结合sorted函数
运行结果:
还有一些其他使用:
# 在tkinter中定义内联的callback函数 import sys from tkinter import Button, mainloop # 这里可以弹出一个窗口,点击按钮,打印Hello,World! callBck = Button(text='Press', command=(lambda: sys.stdout.write('Hello,World!\n'))) callBck.pack() callBck.mainloop()
另一段代码:
str2 = ['123', '213', '2443425', '12324235', '123123', '234234', '434234'] strBegin = filter(lambda x: x.startswith('1'), str2) print(strBegin, type(strBegin)) print(list(strBegin))
运行结果:
打印结果时,因为结果需要转换类型才能打印出来,所以,使用的是:print(list(strBegin))
相关文章推荐
- Python-14-高级特性-函数式编程、lambda表达式、高阶函数、map、reduce、filter、排序、返回函数、闭包closure、装饰器Decrator、偏函数
- Python返回函数_函数闭包_lambda匿名函数
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- Python学习 Day 5 高阶函数 map/reduce filter sorter 返回函数 匿名函数 装饰器 偏函数
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- 【Python3 笔记】Python3 函数式编程 高阶函数 返回函数 匿名函数 装饰器 偏函数
- python函数知识点2(高阶函数、返回函数、匿名函数)
- python学习-day5-返回函数和闭包
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊
- Python高阶函数 filter 、排序、返回函数、闭包、装饰器、偏函数------21
- Python学习——利用闭包返回一个计数器函数,每次调动它返回递增整数
- Python基础学习笔记——函数(4):递归函数、匿名函数、高阶函数
- Python教程学习简记9--Python 返回函数 闭包
- python--lambda表达式,高阶函数map,reduce,filter,sorted,闭包,偏函数,装饰器
- Python学习笔记六:函数定义传参,以及lambda函数
- python学习笔记,返回函数,匿名函数,装饰器
- 高阶函数、返回函数、闭包、匿名函数、装饰器、偏函数
- python学习返回函数(闭包)
- python学习之---匿名函数,返回函数,偏函数
- python 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归