美文网首页
Python的高阶函数初探

Python的高阶函数初探

作者: 前端转转 | 来源:发表于2019-03-11 21:38 被阅读0次

高阶函数 Higher-order function

1. map()

map(fn,Interable)函数接收两个参数,一个是函数,一个是Iterable。返回值是一个Interator。map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

如下例子。map的返回值是一个Interator对象,通过list()方法转换成一个list集合。

def f(x):
    return x*x
r = list(map(f,[1,2,3,4]))
print(r)
2. reduce()

reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

如下例子:给出序列[1,2,3,4],输出1234

from functools import reduce
r = reduce(lambda x, y: x*10 + y, [1,2,3,4])
print(r)

范例:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

from functools import reduce

def str2float(s):
    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    def char2num(str):
        return DIGITS[str]
    s = s.split(".")
    return reduce(lambda x, y: x*10 + y, map(char2num, s[0])) +pow(0.1, len(s[1]))*reduce(lambda x, y: x*10+y, map(char2num, s[1]))
3. filter(fn,arg)

根据传入的函数按条件筛选元素

如下一个筛选回数的例子:

def is_palindrome(n):
    s = str(n)
    s = s[::-1]
    return int(s) == n

output = filter(is_palindrome, range(1, 1000))
4. 匿名函数:

匿名函数关键字:lambda

匿名函数的关键字是lambda,冒号前面是函数的参数。匿名函数的函数体是一个表达式,没有return,表达式的结果就是匿名函数的返回值。

L = list(filter(lambda x:x%2 ==1, range(1, 20)))
print(L)
5. 装饰器(decorator)

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator. 每个函数都是对象,它上面存在一个name的属性,能获取到函数的名字。

通过name 获取函数的名字:

def top(text):
    print(text, top.__name__)
    
top("这是函数top的名字:")  //这是函数top的名字: top

装饰器的定义与使用如下:

import functools
# 创建装饰器:
# 不用传参的装饰器
def log(fn):
    @functools.wraps(fn)
    def wrapper(*k, **kw):
        print("call %s ()" % fn.__name__)
        return fn(*k, **kw)
    return wrapper


# 装饰器的使用:
@log
def A():
    print("这是一个装饰器的例子")
A() // call A ()  这是一个装饰器的例子


# 需要传参的装饰器
def logA(text):
    def decorator(fn)
        @functools.wraps(fn):
        def wrapper(*k, **kw):
            print("%s call %s ()" % (text, fn.__name__))
            return fn(*k, **kw)
        return wrapper

    return decorator
# 装饰器的使用:
@logA("这是一个带参数的装饰器")
def B():
    print("输出结果")
B() // 这是一个带参数的装饰器 call B () 输出结果

在上面的例子中,不带参数的装饰器:

@log
def A():
    pass

相当于:

A = log(A)

我们可以看到log()函数运行之后返回的是wrapper函数,这个函数再返回原函数fn时并调用了原函数。此时的A 指向的是wrapper这个函数,A._name_ 等于wrapper,在这种情况下,有些依赖函数签名的代码执行就会出错。所以使用@functools.wraps(fn):把原始函数的name属性的值复制给wrapper函数,以避免有些依赖函数签名的代码执行就会出错。

带参数装饰器:

@logA("这是一个带参数的装饰器")
def B():
    pass

相当于:

B = longA('这是一个带参数的装饰器')(B)

后面的过程都和不带参数的都一样。

6. 偏函数

偏函数(Partial function)是python中functools模块提供的一个功能。functools.partial()可以把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

例子:

import functools

int2 = functools.partial(int, base = 2)
value = int2("100")
print(value)  // 4

相关文章

  • Python的高阶函数初探

    高阶函数 Higher-order function 1. map() map(fn,Interable)函数接收...

  • python装饰器

    装饰器简述 要理解装饰器需要知道Python高阶函数和python闭包,Python高阶函数可以接受函数作为参数,...

  • Python高阶函数

    本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,...

  • 高阶函数初探

    高阶函数,就是把一个函数当成参数传到另一个函数里面看代码: 第一个函数process内定义了两个参数,第一个参数是...

  • wangyanhua--python2

    基本函数的使用 匿名函数 常用系统高阶函数 高阶函数 常用系统高阶函数 Python递归 安装第三方库 三国小说人...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Python函数式介绍一 - 高阶函数

    Python函数式介绍一 - 高阶函数Python函数式介绍二 - 链式调用 最近为了给朋友推广Python函数式...

  • 【Python】-014-函数-函数式编程-2

    python内置高阶函数 Filter函数filter(function, sequence) -> list, ...

  • 高阶函数(Python)

    什么是高阶函数(Python)? 高阶函数:能接收函数做参数的函数 变量可以指向函数 函数的参数可以接受变量 一个...

  • filter函数有点意思

    filter函数 filter(function, iterable)filter函数是python中的高阶函数,...

网友评论

      本文标题:Python的高阶函数初探

      本文链接:https://www.haomeiwen.com/subject/ftvipqtx.html