python函数式编程一

一、pythonorand的使用

  • 1、使用方式

    result = a or b
    result = a and b
    复制代码
  • 2、or计算规则

    • a为真的时候就直接返回a的值,否则返回b的值
  • 3、and计算规则

    • a为真的时候返回b,当a为假的时候返回a
  • 4、pythonFalse的值

    • None
    • False
    • 0
    • ''/()/[]
    • {}

二、python中的三木运算

  • 1、格式

    result = 条件为真时返回的结果 if 条件 else 条件为假返回结果
    复制代码
  • 2、使用案例

    result = '我是真的' if True else '我是假的'
    复制代码

三、python中函数的定义方式

  • 1、常规函数定义方式

    def 函数名(参数):
    	pass
    复制代码
  • 2、lambda函数

    赋值接收的变量 = lambda 参数列表...: 函数返回值
    f = lambda x, y: x + y
    复制代码

四、函数传参的几种形式

  • 1、无参函数

    def foo():
    	pass
    复制代码
  • 2、固定参数(形参与实参一一对应)

    def foo(name, age, gender):
    	pass
    
    if __name__ == '__main__':
    	foo('张三', 20, '男')
    复制代码
  • 3、可变参数(python中习惯使用关键词*args来表示)

    在函数体中接收的是一个tuple元祖

    def foo(*args):
    	print(args)
    
    if __name__ == '__main__':
    	foo(1,2,3,4,5)
    复制代码
  • 4、关键字参数(python中习惯使用关键词**kwargs来表示)

    关键字参数传递到函数中是以dict的方式展示

    def bar(**kwargs):
        print(type(kwargs))
        print(kwargs)
    
    if __name__ == '__main__':
        bar(name='张三', gender='男', age=20)
    
    # <class 'dict'>
    #{'name': '张三', 'gender': '男', 'age': 20}
    复制代码
  • 5、固定参数、可变参数、关键字参数混合使用

    原理

    • 1.先会把实参不能少于形参固定参数的个数(少于会直接报错)
    • 2.把实参优先给固定参数,多余的给可变参数
    • 3.如果使用了关键词传递的参数就是关键字参数中
    def test(name, age, *args, **kwargs):
        print(name, age)
        print(args)
        print(kwargs)
    
    if __name__ == '__main__':
        test(1, 2, 3, 4, 5, address='广东', mobile = '110')
    复制代码
  • 6、默认参数

    def test(name, age=20):
        print(name, age)
    
    if __name__ == '__main__':
        test('哈哈')
    复制代码

五、函数的返回值

  • 1、如果没指定函数返回就返回None
  • 2、函数使用return的返回值只有一个
  • 3、如果一个函数可以返回一个列表、元祖、字典
  • 4、函数可以使用yield返回多个值

六、python中常见的内置函数

  • 1、map函数(遍历可迭代对象返回一个可迭代对象)

    • 使用格式

      map(函数, iterable...)
      复制代码
    • 使用案例

      list1 = [1, 2, 3, 4, 5]
      list2 = [6, 7, 8, 9, 10]
      
      result1 = map(lambda x: x ** 2, list1)
      print(list(result1))
      
      result2 = map(lambda x, y: x + y, list1, list2)
      print(list(result2))
      
      tuple1 = (1, 2, 3, 4)
      print(list(map(lambda x: x ** 2, tuple1)))
      复制代码
  • 2、filter函数(过滤数据)

    • 使用格式

      filter(函数, iterable...)
      复制代码
    • 使用案例

      list1 = [1, 2, 3, 4, 5]
      print(list(filter(lambda x: x % 2 == 0, list1)))
      print([x for x in list1 if x % 2 == 0])
      复制代码
    • 过滤数据推荐使用列表推导式

      list1 = [1, 2, 3, 4, 5]
      print([x for x in list1 if x % 2 == 0])
      复制代码
  • 3、reduce函数(连续计算)注意需要先导包

    • 1、定义格式

      from functools import reduce
      
      result = reduce(函数, iterable, 初始化值)
      复制代码
    • 2、使用案例

      from functools import reduce
      
      if __name__ == "__main__":
          list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
          result = reduce(lambda x, y: x + y, list1)
          print(result)
          result2 = reduce(lambda x, y: str(x) + str(y), list1, '==')
      复制代码
  • 4、sorted排序函数

    • 列表排序

      sorted([36, 6, -12, 9, -22])  列表排序
      复制代码
    • 字符排序

      sorted(['bob', 'about', 'Zoo', 'Credit'])  #字符串排序,按照ASCII的大小排序
      复制代码
    • 逆向排序(相当于先升序排序后,然后在反向)

      sorted([36, 6, -12, 9, -22], reverse=True)
      复制代码
    • 添加函数排序使用关键参数key(注意这个地方的函数只能传递一个参数的函数)

      L = [{1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
      print(sorted(L, key=lambda x: len(x)))
      复制代码
    • key函数需要传递多个函数的时候

      from functools import cmp_to_key
      
      if __name__ == "__main__":
          L = [{1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
          print(sorted(L, key=cmp_to_key(lambda x, y: x[1] > y[1])))
      复制代码
    • 元祖、字典使用排序

      a = [('b', 2), ('a', 1), ('c', 0)]
      print(sorted(a, key=lambda x: x[0]))
      print(sorted(a, key=lambda x: x[1]))
      
      b = [{'city': '深圳', 'tem': 40}, {'city': '广州', 'tem': 30}]
      print(sorted(b, key=lambda x: x['tem']))
      复制代码

七、更多关于作者文章请访问

猜你喜欢

转载自juejin.im/post/5bdaa856f265da397a0e7ef3
今日推荐