Python中的函数式编程 高阶函数、匿名函数

鳄鱼君

发表文章数:642

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Python中的函数式编程 高阶函数、匿名函数

Python中的高阶函数

变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就成为高阶函数

满足下面条件之一即为高阶函数:

  • 1.把一个函数名当做实参传给另一个函数(在不修改被装饰函数源代码的情况下为其添加功能)
  • 2.返回值中包含函数名(不能修改函数的调用方式 )

实例引入1

def fun1():
    print('the fun1 is running....')

def fun2(fun):
    fun() #调用fun1函数
    print('the fun2 is running.....')
fun2(fun1) #传入fun1函数作为参数

上面的列子,在不修改fun1函数的情况下,为它加入了新的功能,但它不是一个装饰器,因为函数的调用方法已经被改变了,我们可以把它当作理解后面要学到的装饰器的一个思路。

实例引入2

import time
def fun1():
    time.sleep(1)
    print('the fun1 is running....')

def fun2(fun):
    print(fun) #就是print(fun1),返回的是fun1的内存地址
    print('我是在fun2函数里面修改的')
    return fun #返回的是fun2的运行结果,还是fun1的内存地址
# fun2(fun1()) #相当于把fun1的返回值传进来了,fun1没有返回值None,这个就不符合高阶函数的定义,返回的不是函数
# fun2(fun1) #相当于把fun1的内存地址传进来
f=fun2(fun1) #我们可以把fun1的内存地址赋值给f,f()=fun1()
f()
#f()=fun1()我们没有改变fun1函数的调用方式,但是可以为fun1函数增添一些功能

讲了这么多,其实就是让你在学习后面的装饰器的时候更容易理解

函数嵌套

定义:在一个函数的函数体内用def声明一个新的函数,而不是在里面调用函数。

import time

def function():
    time_style='%Y-%m-%d: %X'  #定义日期的格式
    time_content=time.strftime(time_style) #固定方法,打印当前时间
    with open('file.py','a+') as f:
        f.write('现在时间:%s.我是一条存入到文件中的日志\n'% time_content)

def fun1():
    print('fun1 is running....')
    function()

def fun2():
    print('fun2 is running....')
    function()
def fun3():
    print('fun2 is running....')
    function()

fun1()
fun2()
fun3()

上面代码是打印简单的日志操作,如过不使用函数的话,会有很多的重复,想要更多的功能的话,就要逐个去修改代码。

Python中的匿名函数

定义一个匿名函数需要使用lambda关键字,lambda 函数的语法只包含一个语句用法如下:

lambda [arg1 [,arg2,.....argn]]:expression
  • lambda 只是一个表达式,没有函数名,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • expression — 表达式。
fun=lambda x,y : x**2+y**2
print(fun(2,3))
print(fun(y=3,x=2)) #关键词参数

如果只打算给其中一部分参数设定默认值,那么应当将其放在靠后的位置(和定义函数时一样,避免歧义),否则会报错。lambda函数常常不会单独使用,经常和filter和map结合使用:map和reduce的使用方法

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Python中的函数式编程 高阶函数、匿名函数》 发布于2020-04-09

分享到:
赞(1) 赏杯咖啡

评论 抢沙发

4 + 4 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册