您的位置:首页 > 编程语言 > Python开发

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))

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐