• 函数【七】高阶函数/内置函数


    python函数式编程

     

    高阶函数:就是把函数当成参数传递的一种函数

    1、函数名可以进行赋值;

    2、函数名可以作为函数参数,还可以作为函数的返回值;

    a、函数是第一类对象

    b、函数可以被赋值

    c、可以被当做参数

    d、可以当做返回值

    e、可以作为容器类型的元素

    def f(n):
        return n*n
    def foo(a,b,func):
        ret = func(a) + func(b)
        return ret
    foo(1,2,f)
    print(foo(1,2,f))
    #传入参数a=1,b=2,func=f;
    #ret = f(1) + f(2);
    #f(1)=1,f(2)=4此时调用f函数;
    #ret=5;

    map函数:

    描述

    map() 会根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    语法

    map() 函数语法:

    1
    map(function, iterable, ...)

    参数

    • function -- 函数
    • iterable -- 一个或多个序列

    返回值

    Python 2.x 返回列表。

    Python 3.x 返回迭代器。

    实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>>def square(x) :            # 计算平方数
    ...     return ** 2
    ...
    >>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
    [1491625]
    >>> map(lambda x: x ** 2, [12345])  # 使用 lambda 匿名函数
    [1491625]
      
    # 提供了两个列表,对相同位置的列表数据进行相加
    >>> map(lambda x, y: x + y, [13579], [246810])
    [37111519]
    msg = [1,12,33,42,15,16]
    #需求自增1
    def add_one(x):
        return x+1
    #需求自减1
    def reduce(x):
        return x-1
    #需求平方
    def pf(x):
        return x**2
    #实现逻辑
    def fangfa(func,red):
        ret = []
        for i in red:
            res = func(i)
            ret.append(res)
        return ret
    print(fangfa(add_one,msg))
    print(fangfa(reduce,msg))
    print(fangfa(pf,msg))
    
    print(fangfa(lambda x:x+1,msg)) #用lambda函数替换add_one函数
    print(fangfa(lambda x:x-1,msg)) #用lambda函数替换requce函数
    print(fangfa(lambda x:x**2,msg))#用lambda函数替换pf函数
    
    print(list(map(lambda x:x+1,msg))) #map处理的结果是一个可迭代对象,python3中需用list转换;
    print(list(map(lambda x:x-1,msg))) #map的第一个参数是逻辑,第二个参数是可迭代对象;
    print(list(map(lambda x:x**2,msg)))

     filter函数:

    描述

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    语法

    以下是 filter() 方法的语法:

    1
    filter(function, iterable)

    参数

    • function -- 判断函数。
    • iterable -- 可迭代对象。

    返回值

    返回列表

    实例

    以下展示了使用 filter 函数的实例:

    1
    2
    3
    4
    5
    6
    7
    def is_odd(n):
        return % 2 == 1
      
    newlist = filter(is_odd, [12345678910])
    print(newlist)
     
    [13579]
    lise_l = ["sb_asd","sb_we","sb_ig","rng"]
    #需求去掉开头是sb的
    def sh_show(n):
        return n.startswith("sb")
    #实现逻辑
    def filter_test(func,array):
        red = []
        for i in array:
            if not sh_show(i):
                red.append(i)
        return red
    print(filter_test(sh_show,lise_l))
    
    print(filter_test(lambda n:n.startswith("sb"),lise_l))#lambda
    
    print(list(filter(lambda n:not n.startswith("sb"),lise_l)))#filter

     reduce函数

    描述

    reduce() 函数会对参数序列中元素进行累积。

    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

    在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:

    1
    from functools import reduce
    1
    2
    3
    4
    5
    6
    7
    from functools import reduce
     
    def add(x,y):
        return + y
     
    print (reduce(add, range(1101)))
      

    语法

    reduce() 函数语法:

    1
    2
    reduce(function, iterable[, initializer])
      

    参数

    • function -- 函数,有两个参数
    • iterable -- 可迭代对象
    • initializer -- 可选,初始参数

    返回值

    返回函数计算结果。

    实例

    以下实例展示了 reduce() 的使用方法:

    1
    2
    3
    4
    5
    6
    7
    >>>def add(x, y) :            # 两数相加
    ...     return + y
    ...
    >>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
    15
    >>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
    15

     python的内置函数

      内置函数  
    abs() divmod() input() open() staticmethod()
    all() enumerate() int() ord() str()
    any() eval() isinstance() pow() sum()
    basestring() execfile() issubclass() print() super()
    bin() file() iter() property() tuple()
    bool() filter() len() range() type()
    bytearray() float() list() raw_input() unichr()
    callable() format() locals() reduce() unicode()
    chr() frozenset() long() reload() vars()
    classmethod() getattr() map() repr() xrange()
    cmp() globals() max() reverse() zip()
    compile() hasattr() memoryview() round() __import__()
    complex() hash() min() set()  
    delattr() help() next() setattr()  
    dict() hex() object() slice()  
    dir() id() oct() sorted() exec 内置表达式
     

     

     内置函数用法

     

    max和min高级用法:

    用法

    1、max进行比较时传入的数据类型必须是可迭代对象(基本原理就是一个for循环依次取出可迭代对象中的每一个元素进行比较);

    2、比较时从第一个元素进行比较(按ascii码进行排序),如果第一个元素分出大小则后面就不进行比较了;

    1
    2
    3
    ll = ["10a","A20","A10"]
    print(max(ll))
    A20
    1
    2
    3
    msg = {"age1":18,"age2":20}
    print(max(zip(msg.values(),msg.keys())))
    (20'age2')
    1
    2
    3
    4
    5
    6
    7
    people = [
        {"name":"alex","age":70},
        {"name":"wpq","age":100},
        {"name":"lhf","age":30},
        {"name":"lw","age":50}
    ]
    print(max(people,key=lambda dic:dic["age"])) #传入key参数
  • 相关阅读:
    iframe自适应高度的多种方法方法
    [tomcat][mysql][JDK][maven][myEclipse][ubuntu][centOs][oracle]等下载地址整理
    解决电脑速度越来越慢的方法
    li:hover 上再IE6下就没有效果的解决方法
    各种常用文件后缀名详解
    ASP.net中网站访问量统计方法
    RabbbitMQ的配置 以在.NetCore 的CAP 使用RabbbitMQ 实现订阅与发布问题
    .netCore 根据模型生成数据库
    jsonp Ajax跨域请求
    IE8 placeholder兼容+Password兼容
  • 原文地址:https://www.cnblogs.com/youxiu123/p/11480677.html
Copyright © 2020-2023  润新知