zoukankan      html  css  js  c++  java
  • 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    函数进阶三

    1. 匿名函数

    1. 什么是匿名函数

    匿名函数就是没有名字的函数,没法调用,他只能和某些方法联合起来使用

    2. 匿名函数的语法

    lambda 参数:返回值
    #也可以通过赋值,让它变为有名函数
    f = lambda x,y:x+y
    res = f(1,2)
    print(res)
    

    3. 能和匿名函数联用的一些方法

    (1)max 返回最大值

    • 使用方法:max(iterable,key = function)
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    def func(name):  # nick/jason/tank/sean/z
        return salary_dict[name]  # 3000/100000/5000/2000/1000
    
    res = max(salary_dict, key=func)  # 默认按key的首字母 这里是按工资排序
    res = max(salary_dict, key=lambda name: salary_dict[name]) 
    
    • key=function默认做的事情
      # 1. 循环遍历salary_dict,会取到所有的key值
      # 2. 然后把所有的key值依次丢入function的形参中,返回薪资
      # 3. 通过返回的薪资排序,得到最大值
      
      
      #下面的方法中key同理
      

    (2)min 返回最小值

    • 使用方法:min(iterable,key = function)
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    def func(name):  # nick/jason/tank/sean/z
        return salary_dict[name]  # 3000/100000/5000/2000/1000
    
    res = min(salary_dict, key=lambda name: salary_dict[name])
    print(res)
    

    (3)fileter 返回筛选值

    • 使用方法:fileter(function,iterable)
    • 返回的是布尔值为True的item
    def function(item):  # 1/2/3/4
        if item < 5:
           return True
       else:
           return False
    
    res = filter(function, [1, 2, 3, 4])
    res = filter(lambda item: item > 2, [1, 2, 3, 4])
    print(res)  # 迭代器
    print(list(res))
    
    #例二 
    salary_dict = {
        'nick': 3000,
        'jason': 100000,
        'tank': 5000,
        'sean': 2000,
        'z': 1000
    }
    
    res = filter(lambda item: salary_dict[item] > 3000, salary_dict)
    print(list(res))
    

    (4)map 返回映射

    • 使用方法:map(function,iterable)
    def function1(item):
        return item + 2
    
    res = map(function1, [1, 2, 3, ])
    print(res) # <map object at 0x00000000029C6E80>
    print(list(res)) # [3, 4, 5]
    

    (5)sorted 排序并生成一个新的列表

    • 使用方法:sorted(iterable,key = function,reverse = ?)

    def function2(item):
    return salary_dict[item]

    salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000,
    'z': 1000
    }

    res = sorted([2,3,4,1,0,5],key=lambda k:k,reverse=True)

    res = sorted(salary_dict, key=function2, reverse=True)
    print(res) # sorted 返回的就是一个列表类型,不是像上面的方法一样返回一个迭代器

    print(list(res)) # 这里不用在强制类型转换了

    
    #### (6)reduce 累积
    
    -  **reduce()** 函数会对参数序列中元素进行累积, 返回函数计算结果。 
    -  函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。 
    - `reduce(function, iterable, [initializer])`
    - function -- 函数,有两个参数
    - iterable -- 可迭代对象
    - initializer -- 可选,初始参数,不写默认是0,写了会先把这个数和容器类型的第一个元素运算,得到的结果再与第二个元素运算。
    
    - ```python
    >>>def add(x, y) :            # 两数相加
    ...     return x + 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
    
     res1 = reduce(lambda x,y:x+y,[1,2,3,4],100)
     print(res1)  # 110 
    
     res2 = reduce(lambda x,y:x+y,[1])
     print(res2)  # 1 
    
    

    2. python解释器内置方法

    方法名 使用方法 实例
    bytes 转化为二进制码 res = bytes('中国', encoding='utf8') # b'xe4xb8xadxe5x9bxbd'
    chr/ord 将字母数字互转 print(chr(97))print(ord('a')) # a 97
    divmod 取整和取余 print(divmod(10, 4)) # (2,2)
    enumerate 同时取索引和值 lt = [1, 2, 3] for ind, val in enumerate(lt): print(ind, val)
    eval 把字符串的引号去掉,留下来的是什么就是什么 s = '"abc"'print(type(eval(s)), eval(s)) #<class 'str'> abc
    hash 求哈希值 print(hash(123123)) #123123
    abs 绝对值 print(abs(-1)) # 1
    all 可迭代对象内的元素全部为True则为True print(all([1, 2, 3, 3])) #True
    any 可迭代对象内的元素有一个为True则为True print(any([0, 1, ])) #True
    bin/oct/hex 10进制转化为2/8/16进制 print(bin(123)) # 0b1111011
    dir 列出模块(库)的所有方法 import time print(dir(time))
    frozenset 不可变化的集合,类似于元组 s = frozenset({1,2,3}) #frozenset({1,2,3})
    globals/locals 列出所有全局变量/列出所有当前位置的变量 print(globals()) / print(locals())
    pow print(pow(3,2)) # 9
    slice 切片 s = slice(1, 5, 2) lt = [1, 2, 3, 4, 5, 6, 7] print(lt[s])
    sum 求和sum(iterable) sum([1,2,3]) # 6
    __import__ 通过字符串导入模块 time = __import__('time')
    • 其他进制转十进制:
      int('进制数',n) # n表示前面的是几进制

    3. 异常处理

    • 语法:

      try:
          code1
      except Exception as e:
          print(e) #可加可不加
          code2
      finally:   # 可加可不加
          code3
      
    • 异常处理就是当程序报了错,进行处理

    • 报错之后,不执行下面的代码

    • 异常捕捉只能捕捉逻辑错误

    • finally 方法的作用是无论你报不报错,都执行其缩进下的代码

      dic = {'a': 1}
      try:
          print(dic['b'])  # KeyError
          1 / int(num)  # 报错之后,不运行下面的代码
      
      except Exception as e:  # 万能异常,只要有错误,就捕捉
          print(e)  # e存储的是错误的内容,而不是错误的类型
          print('傻逼,不知道什么错误')
      finally:
          print('asdasf')
      
    • assert +条件 ( 断言 +条件) 现在这种方法已经被淘汰

      条件成立不报错,不成立报错

      num = input('num:')
      assert 1 == int(num)  
      
    • raise 主动报错误 (就是主动报错,没什么用处)

      x = 1
      raise(x = 1) # 报错
      

    面向过程编程

    • 面条版 --》 面向过程编程 --》 思想 --》面向对象编程

    • 面向(代词--》使用) 过程(流程--》步骤) 编程(写代码,写文件)

    • IPO编程

      I input 输入(定义的变量) P Process 过程(控制变量的改变) O output(新的变量) 输出编程 == 面向过程编程

    • 面向过程编程:类似于流水线,一步一步往下走

    • 一个步骤就是一个函数

    • 面向过程编程

      优点:逻辑非常清晰

      缺点:上一步错了,下一步就跟着一起错

  • 相关阅读:
    文本效果
    C# 将数据导出到Execl汇总[转帖]
    using方法的使用
    存储过程的相关记录
    Dictionary 泛型字典集合[转帖]
    JS验证
    浅谈AutoResetEvent的用法 [转帖]
    聊聊xp和scrum在实战中的应用问题
    字体下载
    [转] 前端开发工程师如何在2013年里提升自己
  • 原文地址:https://www.cnblogs.com/Mcoming/p/11585111.html
Copyright © 2011-2022 走看看