python函数式编程

215 阅读2分钟
  1. lambda表达式:匿名函数,定义函数时不需要函数名,用管家in自lambda来实现,expression只是简单表达式,不能完整实现内部函数的代码块,因此叫lambda表达式更合适些,x+y是返回值

    lambda parameter_list:expression
    f = lambda x,y:x+y
  2. 三元表达式:x if x>y else y
  3. map:会对第二个参数传入的集合或者序列都会执行第一参数(函数)

    list_x = [1,2,6,8,7,9,0]
    def square(x):
       return x*2
    list_res = map(sqare,list_x)
    print(list(list_res)) ----[2, 4, 12, 16, 14, 18, 0]

  4. map结合lambda一起使用:map第二个参数是可变参数,可以直接传入多个参数,但是,必须和lambda的传入参数的个数保持一致,代码简洁,但是不会提高运行效率。

    list_x = [1,5,6,3,4,7,8]
    list_y = [1,5,6,3,4,7,8]
    r = map(lambdax,y:x*x+y,list_x,list_y)
    print(list(r))------[2, 30, 42, 12, 20, 56, 72]

  5. reduce:这个函数需要导入from functools import reduce  reduce(lambda...,初始值),在使用reduce必须要传两个参数,reduce是连续计算的,连续调用lambda第一个x和y是1,2第二次是第一次的结果和第三个元素

    from functools import reduce
    list_x = [1,2,3,4,5,6,7,78,]
    r = reduce(lambda x,y:x+y,list_x)
    print(r) ---106

  6. filter:非常适合在一个列表里将某种元素剔除,集合过滤,返回值得真假来保留集合的值

    list_x = [1,0,1,0,0,0,1]
    r = filter(lambda x:true if x==1 else False,list_x)
    print(list(r))

  7. 命令式编程vs函数式编程
  8. 装饰器:important!!!!:编程的开闭原则:对修改是封闭的,对拓展是开放的,通过拓展来变更我们的业务逻辑。

    def f1():
       print("this is a f1")
    def f2():
       print("this is a f2")
    def print_time(func):
       print(time.time())
       print("这是拓展功能")
       func()
    print_time(f1)
    print_time(f1)

  9. 装饰器:

    def decorator(func):
       def wrapper():
          print(time.time())
          func()
        return wrapper
    def f2():
       print("")
    f = decorator(f2)
    f()

  10. 装饰器:语法糖:@符号加装饰函数名字,不修改原函数的基础上仍然能够用原函数的名调用实现装饰后的新功能,装饰器可以理解为原函数上添加@符号后的函数名,添加新的功能,

    def decorator(func):
       def wrapper():
          print(time.time())
          func()
        return wrapper
    @decorator
    def f2():
       print("")
    f2()
  11. 装饰器:传参:

    def decorator(func):
         def wrapper(*arg):
           print(time.time())
           func(*arg)
          return wrapper
    @drcorator
    def f1(args):
       print("nihao "+ args)
    f1("lucas_li")
  12. 装饰器:关键字参数,当不知道传入什么参数时,这样的形式是非常实用,兼容各种类型

    def decorator(func):
         def wrapper(*arg,**kw):
           print(time.time())
           func(*arg)
          return wrapper
    @drcorator
    def f1(args,**kw):
       print("nihao "+ args)
    f1("lucas_li")