Python3 函数式编程

高阶函数

变量可以指向函数

函数本身可以赋值给变量,即:变量可以指向函数。
一个变量指向一个函数,可以直接通过该变量调用这个函数。

>>>f=abs
>>>f(-10)
10

函数名也是变量

函数名其实是指向函数的变量

传入函数

一个函数可以接收另一个函数作为参数,这种函数叫做高阶函数

filter()

  • filter()用于过滤序列。
    接收一个函数和一个序列,把传入的函数以此作用于每个元素,然后根据返回值是TrueFalse决定保留或丢弃该元素

sorted()

  • sorted()可以直接对list排序
>>>sorted([36.5.-12,9,-21])
[-21, -12, 5, 9, 36]
  • sorted()也是一个高阶函数,还可以接收一个key函数实现自定义的排序。
>>>sorted([36,5,-12,9,-21],key=abs)
[5,9,-12,-21,36]
  • sorted()对字符串排序,默认是按照ASCII码大小比较。
    若想忽略大小写,按字母序排序,用key函数将字符串都变成大写或小写字母,再比较
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
  • 反向排序,可以传入第三个参数reverse=True
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']

返回函数

函数作为返回值

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

闭包

  • 闭包(closure):如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,则此内部函数被认为是闭包
  • 闭包中是不能修改外部作用域的局部变量的
  • 返回闭包时:返回函数不要引用任何循环变量,或后续会发生变化的变量。
def count():
    fs=[]
    for i in range(1,4):
        def f():
            return i*i
        fs.append(f)
    return fs

f1,f2,f3=count()
>>>f1()
9
>>>f2()
9
>>>f3()
9
  • 一定要引用循环变量的处理方法:
    再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。
def count():
    def f(j):
        def g():
            return j*j
        return g
    fs=[]
    for i in range(1,4):
        fs.append(f(i)) #f(i)立刻被执行,因此i的当前值被传入f()
    return fs
>>>f1,f2,f3=count()
>>>f1()
1
>>>f2()
4
>>>f3()
9

装饰器

  • 在代码运行期间动态增加功能的方式,称为装饰器(Decorator)
  • 装饰器(Decorator)实际就是一个返回函数的高阶函数。
  • 在面向对象(OOP)的设计模式中,decorator被称为装饰模式。
    OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator
    Python的decorator既可以用函数实现,也可以用类实现。

偏函数(partial function)

  • 函数在执行时,若有一个或多个参数可以预先用上,可以通过这个参数重新返回一个新的函数,然后调用这个新函数。
    functools.partial可以创建一个偏函数。如:
import functools
int2=functools.partial(int,base=2)
int2('1000000')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值