Python篇-函数(三)高阶函数

作者: TianTianBaby223 | 来源:发表于2018-10-08 18:23 被阅读3次

    一 函数的作用域注意

    • 函数名可以作为返回值返回,返回值加一个()就可以调用
    def test1():
        print('我是test1')
    
    def test():
        print('我是test')
        return  test1
    res = test()
    print(res())
    
    • 函数的作用域于与函数定义有关,与调用位置无关
      a返回的就是bar的函数内存地址,a()就是在调用bar函数,此时 name为局部变量,虽然调用位置在最后,但是作用域与函数定义有关
    name = '花花'
    
    def foo():
        name = '思思'
    
        def bar():
            name = '可可'
            print(name)
    
        return bar
    a = foo()
    print(a)
    a()
    foo()()
    
    <function foo.<locals>.bar at 0x10c28ce18>
    可可
    可可
    

    二 : lambda匿名函数

    fun = lambda name1,name2 : print(name1 +"比"+name2+"好看")
    fun('雪芙','可可')
    
    雪芙比可可好看
    
    lambda 返回值
    fun2 = lambda x,y,z: [x+1,y+1,z+1]
    result = fun2(1,2,3)
    print(result)
    
    [2, 3, 4]
    

    三 : 高阶函数

    高阶函数特点,参数是一个函数,返回值是一个函数

    • 高阶函数

    把函数当作参数传给另外一个函数

    def foo(fun,name): ar
        fun(name)
    
    def bar(name):
        print('my name is %s' %name)
    foo(bar,'雪芙')
    
    my name is 雪芙
    

    返回值中包含函数

    def foo(): #n=bar
        return bar
    
    def bar(name):
        print('my name is %s' %name)
    foo()('可可')
    
    • map函数

    模拟map函数
    def map_test(func,array):
        ret = []
        for i in array:
            ret.append(func(i))
        return ret
    
    print(map_test(lambda x:x**2,[1,2,3]))
    
    [1, 4, 9]
    
    map函数

    会根据提供的函数对指定序列做映射。
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
    第二个参数为可迭代对象

    map(function, iterable, ...)
    

    转大写

    # print(list(map(lambda x:x.upper(),"hellow")))
    
    ['H', 'E', 'L', 'L', 'O', 'W']
    

    做加1操作
    第一个参数也可以是自己定义的某个函数,

    def add_one(x):
        return x+1
    
    print(list(map(add_one,[1,2,3,4])))
    
    • reduce函数

    模拟reduce函数
    num = [1,2,3]
    
    def reduce_test(func,array,init=None):
        if init is None:
            res = array.pop(0)
        else:
            res = init
        for num in array:
            res = func(res,num)
        return  res
    
    print(reduce_test(lambda x,y:x+y,num,100))
    
    106
    
    reduce函数

    函数会对参数序列中元素进行累积。
    function -- 函数,有两个参数
    iterable -- 可迭代对象
    initializer -- 可选,初始参数

    reduce(function, iterable[, initializer])
    

    求和

    print(reduce(lambda x,y:x+y,[1,2,3],10))
    
    16
    
    • filter函数

    模拟filter函数
    girl = ['百百', '美美', '思思', '可可']
    def filter_test(func,array):
        ret = []
        for p in array:
            if not func(p):
                ret.append(p)
        return ret
    
    def show(n):
        return n.endswith('思')
    print(filter_test(show,girl))
    
    ['百百', '美美', '可可']
    
    filter函数

    函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
    filter收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    print(list(filter(lambda n:not n.endswith('思'),girl)))
    
    ['百百', '美美', '可可']
    

    相关文章

      网友评论

        本文标题:Python篇-函数(三)高阶函数

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