zoukankan      html  css  js  c++  java
  • python 高阶函数和匿名函数

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # @Time   : 2017/11/02 22:46
    # @Author : lijunjiang
    # @File   : function2.py
    
    """
    高阶函数
    
       就是把函数当成参数传递的一种函数
    """
    
    
    def func1(x, y, f):
        return f(x) + f(y)
    
    
    print(func1(-8, 11, abs))
    
    
    # 执行结果:19
    # 分析:abs() 求一个数的绝对值 -8传递给形参x, 11 传递给y , f接收一个函数,传入的为函数abs()
    #      函数func1返回 x的绝对值和y绝对值的和
    
    # 常用的内置高阶函数
    
    # map(function, list) 函数
    # 接收一个函数和一个List, 把List中的元素及依次传递给function,然后返回一个被function处理完所有List元素的列表
    
    def func2(x):
        return (x * x)
    
    
    l = [1, 2, 3, 4, 5, 6]
    print(map(func2, l))
    
    
    # 执行结果:[1, 4, 9, 16, 25, 36]
    # 把列表l 中的元素传入函数func2中,求每个元素的平方,把每个元素的计算结果合并在一个列表,做为返回值
    
    # reduce(function, sequence) 函数
    # 返回一个值. 首先以序列的前两个元素调用函数function,再以返回值和第三个元素调用,依次执行下去
    
    def func3(x, y):
        return (x + y)
    
    
    sum = reduce(func3, xrange(1, 11))
    print(sum)
    
    
    # 执行结果:55
    # 计算1-10的和
    
    # filter(function, seqence) 函数
    # 返回一个列表。包括给定的序列中所有调用function后返回值为True的元素
    # sqqence是一个str或tuple,返回值必定是同一类型,否则,总是返回一个List
    
    # 求给定序列中可以被3整除或被5整除的数
    def func4(x):
        return (x % 3 == 0 or x % 5 == 0)
    
    
    L = filter(func4, xrange(1, 26))
    print(L)
    # 执行结果:[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24, 25]
    
    
    """
    匿名函数
    不显示的声明函数,可直接传入
    例: lambda x;x * x
    以lambda关键字表示匿名函数,冒号前面的x表示函数的参数 x*x 等价于 def f(x):return(x * x)
    只能有一个表达式,不用写return,返回值就是该表达示的结果
    没有函数名,不必担心函数名冲突,但只能在当前调用
    匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量,利用变量来调用该函数
    """
    
    f = lambda x: x * x
    print(type(f))
    print(f(6))
    
    
    # 执行结果:
    # <type 'function'>
    # 36
    
    # sorted(iterable[,cmp=None,[,key=None[,reverse=True]]]) 函数
    # 作用:第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表
    # 可选参数:cmp, kye, reverse
    # cmp: 比较函数
    # key: 从每个元素中提取的用于比较的关键字
    # reverse:为True时倒序排列 False时正序排列
    # 与sort()的区别,sort()适用于list,对list进行永久排序,sorted 对传入的iterable只进行临时排序
    
    # 对一个字典进行排序
    
    print('定义一个字典')
    dict_test = {'a':10, 'c':200,'e':'50','g':3}
    print(dict_test)
    
    print('直接传入一个字典: sorted(dict_test)')
    print(sorted(dict_test))
    print('等价于 for i in dict_test: print(i)')
    for i in dict_test:
        print(i)
    
    print('传入字典对象:sorted(dict_test.iteritems())')
    print(sorted(dict_test.iteritems()))
    print('等价于: for j in dict_test.iteritems(): print(j)')
    for j in dict_test.iteritems():
        print(j)
    
    print('以字典的Keyc对字典进行排序')
    print(sorted(dict_test.iteritems(), key=lambda d:d[0]))
    
    print('以字典的value对字典时行排序')
    print(sorted(dict_test.iteritems(), key=lambda v:v[1]))
    
    # 执行结果:
    """
    定义一个字典
    {'a': 10, 'c': 200, 'e': '50', 'g': 3}
    直接传入一个字典: sorted(dict_test)
    ['a', 'c', 'e', 'g']
    等价于 for i in dict_test: print(i)
    a
    c
    e
    g
    传入字典对象:sorted(dict_test.iteritems())
    [('a', 10), ('c', 200), ('e', '50'), ('g', 3)]
    等价于: for j in dict_test.iteritems(): print(j)
    ('a', 10)
    ('c', 200)
    ('e', '50')
    ('g', 3)
    以字典的Keyc对字典进行排序
    [('a', 10), ('c', 200), ('e', '50'), ('g', 3)]
    以字典的value对字典时行排序
    [('g', 3), ('a', 10), ('c', 200), ('e', '50')]
    """
    
  • 相关阅读:
    面向对象设计与实用的思考(主动对象与被动对象)
    改进弧长法 判断点是否在多边形内 c#代码
    PaintCode begin
    kiwivm putty lnmp
    初心已变,我也不是当时的我
    spfa
    tree dp
    开心就好之修行ing
    MIME 参考手册
    TypeScript学习和参考手册
  • 原文地址:https://www.cnblogs.com/lijunjiang2015/p/7775064.html
Copyright © 2011-2022 走看看