zoukankan      html  css  js  c++  java
  • Python的函数式编程

    一、函数式编程

      什么是函数式编程?

      函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter

    # 匿名函数
    # 1、def用于定义有名函数
    # func = 函数的内存地址
    # def func(x,y):
    #     return x + y
    # print(func)  # <function func at 0x000001E2154D95E0>
    
    # 2、lambda用于定义匿名函数  目的:精简.不要写return
    # lambda x,y:x+y
    # print(lambda x,y:x+y)  # <function <lambda> at 0x000001E2154D9670>
    
    # 3、调用匿名函数
    # 方式一:内存地址(),匿名lambda造出来的就是一个内存地址。
    # res = (lambda x,y:x+y)(1,2)
    # print(res)  # 3
    
    # 方式二:匿名函数的就是没有名字,不要这样做了。
    func = lambda x,y:x+y
    res = func(1,2)
    print(res)
    
    # 匿名函数应用场景:匿名函数在定义出来后立刻调用,适用于临时调用一次,更多是是将匿名与其他函数配合使用。
    # 匿名函数的应用
    salaries = {
        "siry":3000,
        'tom':7000,
        'lili':10000,
        'jack':2000
    }
    # 需求1:找出薪资最高的那个人
    # 使用max()函数取出最大值
    # res = max([3,343,35,63,3,3,2,21])
    # print(res)  # 343
    
    # 迭代出的内容  比较的值
    # 'siry'  3000
    # 'tom'   7000
    # 'lili'  10000
    # 'jack'  2000
    # res = max(salaries)
    # print(res)  # 为啥是tom?比较的是名字首字母
    
    # 使用key值比较
    # def func(k):
    #     return salaries[k]
    # res = max(salaries,key=func)  # 返回值=func('siry')
    # print(res)  # lili
    
    # 针对func设计成匿名函数
    res = max(salaries,key=lambda k:salaries[k])
    print(res)
    # 排序:关键字sorted()的使用,
    salaries = {
        "siry":3000,
        'tom':7000,
        'lili':10000,
        'jack':2000
    }
    res = sorted([1,2,3,42,14,1,41,4])
    print(res)  # [1, 1, 2, 3, 4, 14, 41, 42]
    
    res1 = sorted(salaries)
    print(res1)  # ['jack', 'lili', 'siry', 'tom ']
    
    res = sorted(salaries,key=lambda k:salaries[k])
    print(res)  # 按工资排序:['jack', 'siry', 'tom', 'lili']
    # 排序:关键字sorted()的使用,
    # salaries = {
    #     "siry":3000,
    #     'tom':7000,
    #     'lili':10000,
    #     'jack':2000
    # }
    # res = sorted([1,2,3,42,14,1,41,4])
    # print(res)  # [1, 1, 2, 3, 4, 14, 41, 42]
    #
    # res1 = sorted(salaries)
    # print(res1)  # ['jack', 'lili', 'siry', 'tom']
    # reverse有个默认值,可以改变排列顺序
    # res = sorted(salaries,key=lambda k:salaries[k],reverse=True)
    # print(res)  # 按工资排序:['jack', 'siry', 'tom', 'lili']
    
    # 映射:map()关键字的使用(了解)
    # l = ['lsj','tiantian','tianjing','wenying']
    # # 列表生成式
    # new_l = (name + '_n' for name in l)
    # print(new_l)  # <generator object <genexpr> at 0x00000298321CF6D0>
    #
    # res= map(lambda name:name+'_n',l)
    # print(res)  # # 生成器:<map object at 0x00000298321C2130>
    
    # 过滤器:filter的应用(了解)
    # l = ['lsj_n','tiantian','tianjing_n','wenying']
    # res = (name for name in l if name.endswith('n'))
    # print(res)  # <generator object <genexpr> at 0x000002279B26F660>
    
    # res = filter(lambda name:name.endswith('n'),l)
    # print(res)  # 与上面的类似生成一个迭代器:<filter object at 0x000001FEC1C46B20>
    
    # reduce()的应用,多用于合并操作(了解)
    from functools import reduce
    res = reduce(lambda x,y:x+y,[1,2,3],10)  # 11 13 16
    print(res)  # 16
    
    res = reduce(lambda x,y:x+y,['a','b','c'])  # 11 13 16
    print(res)  # abc

     

  • 相关阅读:
    Geogebra指令
    大表修改表结构
    mongodb获取配置参数getParameter
    mysql的binlog增量日志解析,提供增量数据订阅和消费
    chaosblade-exec-os项目的burnio.go文件解读
    mysql的where条件中的字段不要加函数
    mysql释放大表空间的正确之道
    mysql服务器问题
    purge binary logs to 'mysql-bin.039790';
    golang操作mysql数据库的规范
  • 原文地址:https://www.cnblogs.com/liunaixu/p/12673680.html
Copyright © 2011-2022 走看看