python 高阶函数详解。

1,概念: Iterable 和 Iterator
Iterable 表示该变量可以被 for in 进行迭代。
Iterator 表示该变量可以被 next(o)进行迭代
(上一个表示有限迭代,下一个表示一个惰性的迭代概念,可以无限迭代。)
一般的Iterable 的变量有:
L=[{},[],(1,),{3:4},{3,4}]
for x in L:
print(isinstance(x,Iterable))
print(isinstance(x,Iterator))

true
false

可见,基础变量
List,tuple,set,dict 都是Iterable,但是 非Iterator.

Iterator 变量的产生方法有:
1,使用Iter(Iterable)的方式将Iterable->Iterator
2,使用生成器:
L=(x for x in L) 生成Iterator.
3,使用yield 将函数变成一个Iterator.
4, 使用map(f(x),Iterable)将其变为Iterator。

使用list(Iterator)可以将其变为列表。

高阶函数:
map:形式 map(f(x),Iterable) return a Iterator.f(x)需要返回值。
reduce:形式 reduce(f(x,y),Iterable. 进行不断的变量减少,返回所需值。
reduce 的函数需要在接收两个参数时能正确运行(即只允许两个位置参数)
filter:形式filter(f(x),Iterable)return a Iterator,f(x)返回true,false。

sorted(Iterable,key=func,reverse=false 返回Iterable.
对于Iterator ,其内部被转换为了list.
Iterator 生成器,是一个工具。其通过方法next(o)进行不断迭代产生数据。
也可以使用 for,list,....隐式调用next(o)来生成一个list...

函数的闭包:
def func()
def in_func()

      return xx
    return in_func

    对于闭包函数首先:
    1,[]类型变量直接全局有效。
    2,对于int...非全局有效,需要加上nonlocal int ,不然会有一个分配错误。
    使用闭包函数可以纪录该函数本身的信息,比如被调用次数。。等等。
    此时,最好将该函数变更为一个对象。
    例子:

def sumManager():
count=0
def thisCount():
nonlocal count
count=count+1
return count
def thissum(*L):
s=0
for x in L:
s=s+x
return s
return [thisCount,thissum]

sumCount,thissum=sumManager()
print(thissum(1,2,3),sumCount())

其中,1,使用nonlocal or []指定母函数中的变量可以被子函数访问。
2,两个函数需要同时返回,这样他们指向同一个函数体变量。

匿名函数:lambda x,y: 表达式,返回值就是表达式的值。
L=(lambda x,y:x+y)(3,4)
L=list(map(lambda x: x*x,[1,2,3]))

L=list(filter(lambda x:x%2==1,range(1,100)))

Decorator:装饰器,用于修饰函数。

1,func---本身是一个对象:所以具备对象属性:比如func.name
2,func---全参数调用:func(*args,kw)所有函数都可以支持这个参数表。
3,Decorator 的常见形式:
def log(f):
functools.wraps(f)
def wrapper(*args,*kw):
act1
t=f(
args,
kw)
act2
return t
return wrapper

    4,带参数类型:
    def log(para):
       def decorator(fun):
            functools.wraps(fun)
            def wrapper(*args,**kw):
                    act1
                        t=fun(*args,**kw)
                    act2
                return t
           return wrapper
         return decorator
        def log(para):

if isinstance(para,str):
def decorator(f):br/>@functools.wraps(f)
def wrapper(*k,kw):
print(para)
print(‘begin‘)
sv=f(*k,*kw)
print(‘end‘)
return sv
return wrapper
return decoratorbr/>else:
@functools.wraps(para)
def wrapper(
k,
kw):
print(‘begin‘)
sv=para(*k,**kw)
print(‘end‘)
return sv
return wrapper

         也可以使用如下的办法:
         def log(para):
            def decorator(func):
                    def warpper(*args,**kw):
                            sv=func(*args,**kw)
                                return sv
                      return warpper
             if isinstance(para,str):
                return decorator
             else:
                return decorator(para)

                    ---------------------相当简洁有效。

                    偏函数
                    import functools

>> int2 = functools.partial(int, base=2)

python 高阶函数详解。

原文地址:http://blog.51cto.com/13568377/2065288

时间: 2024-12-15 07:00:15

python 高阶函数详解。的相关文章

C#函数式编程中的标准高阶函数详解

何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函数.但是今天我们的标题并不是高阶函数,而是标准高阶函数,既然加上了这个标准,就意味着在函数式编程中有一套标准的函数,便于我们每次调用.而今天我们将会介绍三个标准函数,分别为Map.Filter.Fold. Map 这个函数的作用就是将列表中的每项从A类型转换到B类型,并形成一个新的类型.下面我们可以

Python高阶函数_map/reduce/filter函数

本篇将开始介绍python高阶函数map/reduce/filter的用法,更多内容请参考:Python学习指南 map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你就能大概明白map/reduce的概念. 我们先看map.map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序

python高阶函数的使用

目录 python高阶函数的使用 1.map 2.reduce 3.filter 4.sorted 5.小结 python高阶函数的使用 1.map Python内建了map()函数,map()函数接受两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每一个元素上,并把结果作为新的Iterator返回. 举例说明,比如我们有一个函数f(x)=x*2,要把这个函数作用在一个list[1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现. >>

Python中的函数详解

声明:转载自伯乐在线 Python中的函数,无论是命名函数,还是匿名函数,都是语句和表达式的集合.在Python中,函数是第一个类对象,这意味着函数的用法并没有限制.Python函数的使用方式就像Python中其他值一样,例如字符串和数字等.Python函数拥有一些属性,通过使用Python内置函数dir就能查看这些属性,如下代码所示: def square(x): return x**2 >>> square <function square at 0x031AA230>

Python高阶函数-闭包

高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的. 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来. 但是当遇到函数定义的时候解释器只是象征性的将函数名读入内存,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心. 等执行到函数调用的时候,python解释器会再开辟一块内存来存储这个函数里的内容,这个时候,才关注函数里面有哪

python高阶函数

什么是高阶函数?根据例子一步步来 变量可以指向函数 以python内置的求绝对值的函数abs为例,我们可以有下面几种调用方法 >>> abs(-10) 10 但是如果只写abs呢? >>> abs <built-in function abs> abs(-10)是函数的调用,abs是函数本身 我们知道结果可以赋值给变量,函数是否可以呢? >>> x=abs(-10) >>> x 10 y=abs >>>

Python内置函数详解

置顶   内置函数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii 此文参考了别人整理好的东西(地址:http://www.cnblogs.com/sesshoumaru/p/6140987.html#p1),然后结合自己的理解,写下来,一方面方便自己,让自己好好学习,顺便回忆回忆:另一方面,让喜欢的盆友也参考一下. 经查询,3.6版本总共有68个内置函数,主要分类如下: 数学运算(7个) 类型转换

Python学习之函数详解

函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理的小块,这样在以后的python开发中十分重要,可以使你的程序更加简洁,有逻辑,可读性强. 一.函数的调用 Python内置了很多有用的函数,我们可以直接调用.要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以在交互式环境中用help()查看关于调用函数的相关信息 >>> abs(100)100 >>> help(abs) Help on built-i

Python: 高阶函数与lambda表达式

缘由: python语法简单一看就会,但用在实处,想因为少于实战,总感觉有些捉襟. 翻阅跟踪youtube_dl源码,看到filter()函数用法,及其中lambda表达式,感觉好有意思,就补下课,记录所思. 1. 高阶函数 所谓高阶函数,即是能接受函数做参数的函数.函数做参,与c#委托.c++函数指针.Delphi事件有类似之处 比如: def my_func(f, *args): f(args) def my_print(s): print ', '.join(s) my_func(my_p