Python成长记十四(lambda表达式、map、reduce、filter、装饰器)

一、lambda表达式

 作用:定义一个匿名函数
  对比:
   普通函数:
     def add(x,y):
         return x+y
   lamnda表达式格式:
     lambda parameter_list:expression
     替换普通函数为:
     lambda x,y:x+y

    案例:
     f = lambda x,y:x+y
     print(f(1,2))
    结果:3

    注意:冒号(:)后边不能是代码块

   三元表达式
    格式:条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果
    案例:
        x = 5
        y = 3
        res = x if x > y else y
       print(res)

      结果:5

二、map(类)的使用

  案例:
    a_list = [1,2,3,4,5,6]
    def square(x):
         return x * x
   res = map(square,a_list)
   print(list(res))
   结果:[1, 4, 9, 16, 25, 36]

    map与lambda结合使用
案例1:
    a_list = [1,2,3,4,5,6]
    res = map(lambda x:x*x,a_list)
    print(list(res))
    结果:[1, 4, 9, 16, 25, 36]

案例2:(传递两个参数)
       a_list = [1,2,3,4,5,6]
       b_list = [1,2,3,4,5,6]
       res = map(lambda x,y:x*x+y*y,a_list,b_list)
       print(list(res))

      结果:[2, 8, 18, 32, 50, 72]

三、 reduce(连续计算)的使用

   案例1:
        from functools import reduce
        a = [1,2,3,4,5,6,7,8,9,10]
        res = reduce(lambda x,y:x+y,a)
       print(res)
      结果:55
   总结:计算过程为 ((((((((1+2)+3)+4)+5)+6)+7)+8)+9)+10
   案例2:(带初始值)
    from functools import reduce
    a = [1,2,3,4,5,6,7,8,9,10]
    res = reduce(lambda x,y:x+y,a,10)
    print(res)

    结果:65

四、 filter(过滤)的使用

  案例:
     a = [1,1,0,3,1,0]
     res = filter(lambda x: True if x == 1 else False,a )
     print(list(res))

     结果:[1, 1, 1]

小总结:命令式编程和函数式编程的区别

        命令式编程:比如 def  if else  for

函数式编程:比如 map reduce filter lambda

五、装饰器

    定义:为其他函数添加附加功能

    原则:对修改是封闭的,对扩展示开放的

    案例1:
        import time
        def demo1():
             print('这是一个函数')

        def demo2():
             print('这是一个函数')

       def print_time(func):
             print(time.time())
       func()

      print_time(demo1)
      print_time(demo2)
结果:
    1531528022.2958481
    这是一个函数
    1531528022.3038638
    这是一个函数

案例2:
import time
def decorator(func):
    def wrapper():
        print(time.time())
        func()
    return wrapper
def demo1():
    print('这是一个函数')
res = decorator(demo1)
res()
结果:
   1531528780.3672793
       这是一个函数

案例3:(完整装饰器)

import time
def decorator(func):
    def wrapper():
        print(time.time())
        func()
    return wrapper

@decorator
def demo1():
    print('这是一个函数')
demo1()
结果:
       1531529157.8881683
               这是一个函数

案例4:支持参数的装饰器
import time
def decorator(func):
    def wrapper(name):
        print(time.time())
        func(name)
    return wrapper

@decorator
def demo1(name):
    print('名字为',name)
demo1('python')
结果:
         1531529642.7177546
         名字为 python


案例5:支持多个参数的装饰器

 import time
def decorator(func):
    def wrapper(*args):
        print(time.time())
        func(*args)

    return wrapper 

@decorator
def demo1(name):
    print('名字为',name)
    
@decorator
def demo2(name,age):
    print('名字为',name)
    print('年龄为',age)
demo1('python')
demo2('python',30)
结果:
    1531530029.4683325
     名字为 python
     1531530029.4683325
     名字为 python
     年龄为 30


案例6:带关键字参数

 import time
def decorator(func):
    def wrapper(*args,**kw):
        print(time.time())
        func(*args,**kw)
    return wrapper

@decorator
def demo1(name):
    print('名字为',name)

@decorator
def demo2(name,age):
    print('名字为',name)
    print('年龄为',age)

@decorator
def demo3(name,age,**kw):#添加关键字参数
    print('名字为',name)
    print('年龄为',age)
    print('关键字参数为',kw)

demo1('python')
demo2('python',30)
demo3('python',30,a=1,b=2,c='123')
结果:
    1531530752.3828163
名字为 python
1531530752.3828163
名字为 python
年龄为 30
1531530752.3828163
名字为 python
年龄为 30
关键字参数为 {'a': 1, 'b': 2, 'c': '123'}

总结:(1)代码复用(2)功能扩展 (3)flask中的路由控制器 (4)一个函数可以有多个装饰器


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值