• python之路(4)高阶函数和python内置函数


     前言

       函数式编程不用变量保存状态,不改变变量

       内置函数


     高阶函数

    •  把函数当作参数传给另一个对象
    •  返回值中包含函数

     使用的场景演示:

    num_test = [1,2,10,5,8,7]

     客户说 :对上述列表中的每个值都进行平方操作

      我说:这个简单。

     方案一:

    ret=[]
    for i in num_test:
        ret.append(i**2)
        
    print(ret)

      客户说 :我这几万个列表,都给我来一次上面的操作

      我说:.......这个没问题

        多个列表,为了避免写重复代码,应该封装在一个函数里,因此

     方案二:

    def num_t(array):
        ret=[]
        for i in num_test:
            ret.append(i**2)
        return ret

       客户说:又来几万个列表,给我每个值都给我自增1

          我想 :......mmp,这货没完了,要是以后又这么不靠谱,又来啥需求的,得有个最终方案了

        单独写功能函数,在将功能封装到函数里

     方案三:

    def reduce_one(x):
        return x-1
    
    def mult_two(x):
        return x**2
    
    def num_t(func,array):
        ret=[]
        for i in num_test:
            res = func(i)#调用传入的方法
            ret.append(res)
        return ret
    
    print(reduce_one,num_test)

         客户 :给你加薪啊! 

      方案四:(加入匿名函数)

    def num_t(func,array):
        ret=[]
        for i in num_test:
            res = func(i)#调用传入的方法
            ret.append(res)
        return ret
    
    print(num_t(lambda  x:x*2,num_test))

     方案五:(map函数)

    map(lambda x:x*2,num_test)

    内置函数

       map()

    msg='qweasdasdqwe'
    map(lambda x:x.upper(),msg)
    #转换大写

       fliter()

    peop = ['chen','_liu','huan','_de']
    filter(lambda n:not n.startswith('_'),peop)
    #过滤第一个为"_"的字符串

       reduce()

    from functools import reduce #导入模块
    num_l=[1,2,3,100]
    print(reduce(lambda x,y:x+y,num_l))
    #合并操作

       all()   any()

    all([1,2,0])#将所有的元素都做bool运算,只有全部为真,返回true
    any([1,2,0])#将所有的元素都做bool运算,只有存在一个为真,返回true

       bin()   oct()   hex()

    bin(456)#将整型转换成二进制
    oct(456)#将整型转换成八进制
    hex(456)#将整型转换成十六进制

         bytes()

    bytes('你好',encoding='utf-8')#将字符串按照指定编码格式转换成二进制
    bytes('你好',encoding='utf-8').decode('utf-8')#解码二进制

         chr()  ord()

    chr(97)#返回ASCLL码的值,返回 a
    ord('a')#返回在ASCLL码中的位置 返回 97

      divmod()

    divmod(10,3)#返回10比3的商和余 比如(3,1) 对用于分页操作

         eval()

    eval('10*2/(6-1)')#提取字符串中的数据结构,返回值为4.0

      hash():可hash的数据类型即不可变类型,不可hash的数据类型即可变类型

    hash('chen')#根据hash算法返回一个值 数字签名

         globals()   locals()

    globals()#返回当前的全局变量
    locals()#返回当前的局部变量

         zip()

    zip(('chen','liu','hua'),(1,2,3))
    返回一个zip对象  [('a', 1), ('b', 2), ('c', 3)]
    
    dic = {'chen':21,'liu':23,'hua':30}
    zip(dic.keys(),dic.values())
    返回 [('chen', 21), ('liu', 23), ('hua', 30)]
    
    注:传的两个参数只要为序列即可(字符串)
    zip('abc','123')

      min()  max()

    max()#取可迭代对象中最大的值
    max(dic,lambda dic:dic['key'])#当传入一个字典,是可定义匿名函数,实现比较逻辑
    
    min()#取可迭代对象中最小的值

         pow()

    pow(3,3)#3**3
    pow(3,3,2)#3**3%2

         round()

    round(3.2)#四舍五入操作

         slice()

    name='abcdefgh'
    s1=slice(3,5)#定义切片规则
    name[s1]
    
    s=slice(1,4,2)#定义切片和步长

         sorted()

    name = [
        {'name': 'chen', 'age': 18},
        {'name': 'yi', 'age': 16},
        {'name': 'hua', 'age': 23},
        {'name': 'gong', 'age': 25},
        {'name': 'lu', 'age': 22}
    ]
    sorted(name,key=lambda lis:lis['age'])#安装age来排序
    
    
    name = {
        'chen': 18,
        'yi': 16,
        'hua': 23,
        'gong': 25,
        'lu': 22
    }
    sorted(name, key=lambda key:name[key])#按照value来排序
    sorted(zip(name.values(),name.keys()))#得到姓名和年龄
    View Code

         

    内置函数总览:

    内置函数详情

  • 相关阅读:
    cmb 命令
    一个Cookie登录的示例
    webApp开发流程
    17-8-26-WebApp总结
    通过安装WordPress来搭建lamp开发环境
    Windows修改保存txt文件的默认字符集
    js在客户端创建js可读xml
    eclipse常用快捷键
    Express -api参考
    安装ubuntu kylin时问题解决
  • 原文地址:https://www.cnblogs.com/shuzhixia/p/9768865.html
Copyright © 2020-2023  润新知