Python学习笔记--Python函数式编程10-3.返回函数

Python语言的高级特性

函数式编程(FunctionalProgramming)

  • 基于lambda演算的一种编程方式

    • 程序中只有函数
    • 函数可以作为参数,同样可以作为返回值
    • 纯函数式编程语言: LISP, Haskell
  • Python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数式一半Python

  • 需要讲述
    • 高阶函数
    • 返回函数
    • 匿名函数
    • 装饰器
    • 偏函数

返回函数

  • 函数可以返回具体的值
  • 也可以返回一个函数作为结果
# 定义一个普通函数

def myF(a):
    print('In myF')
    return None

a = myF(8)
print(a)
In myF
None

 

# 函数作为返回值返回, 被返回的函数在函数体内定义

def myF2():
    
    def myF3():
        print("In myF3")
        return 3
    return myF3

# 使用上面定义
# 调用myF2, 返回一个函数myF3,赋值给f3
f3 = myF2()
print(type(f3))
print(f3)

f3()
<class 'function'>
<function myF2.<locals>.myF3 at 0x7f5034036e18>
In myF3
3
# 负责一点的返回函数的例子
# args:参数列表
# 1 myF4定义函数,返回内部定义的函数myF5
# 2. myF5使用了外部变量,这个变量是myF4的参数

def myF4( *args):
    def myF5():
        rst = 0
        for n in args:
            rst += n
        return rst
    return myF5

f5 = myF4(1,2,3,4,5,6,7,8,9,0)
# f5的调用方式
f5()

45

 

f6 = myF4(10,20,30,40,50)
# f5的调用方式
f6()

150

 

闭包(closure)

  • 当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回的函数中,这种结果,叫闭包
  • 上面定义的myF4是一个标准闭包结构
# 闭包常见坑
def count():
    # 定义列表,列表里存放的是定义的函数
    fs = []
    for i in range(1,4):
        # 定义了一个函数f
        # f是一个闭包结构
        def f():
            return i*i
        fs.append(f)
    return fs

f1,f2,f3 = count()
print(f1())
print(f2())
print(f3())

9

9

9

 ▲返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值