zoukankan      html  css  js  c++  java
  • 装饰器补充、三元表达式、生成式、匿名函数

    一、叠加多个装饰器


      import time

    def timmer(func):
      def wrapper():
        start_time=time.time()
        res=func()
        end_time=time.time()
        print('time is %s' %(end_time-start_time))
        return res
        return wrapper

    def outer(func):
      # func=home
      def inner(*args,**kwargs):
        name=input('请输入名字:').strip()
        pwd=input('请输入密码:').strip()
        with open('aaa','r',encoding='utf8')as f:
          for line in f:
            data=line.strip(' ').split(',')
            if name == data[0] and pwd == data[1]:
            print('login successfully')
            break
          else:
            print('username or password error')
        func(*args,**kwargs)
      return inner

    @timmer
    @outer
    def home():
      time.sleep(1)
      print('welcome to home page')
    home()

      装饰器补充:
        def outer(func):
        @wraps(func) #把所有属性赋值给wrappr

      备注:
        装饰器是要写到源函数正上方,一个装饰器写一行
        timmer写到上面统计的是下面两个函数执行的时间
        timmer写到下面统计的只是源函数执行的时间

      结论:
        1. 加载顺序(outter函数的调用顺序):自下而上
        2. 执行顺序(wrapper函数的执行顺序):自上而下

    二、有参装饰器

      当装饰器需要传参的时候用有参装饰器
      所谓有餐装饰器,就是套用三个函数
      所传参数可以是一个,也可以不止一个,多个参数之间用逗号隔开

    三、三元表达式

      正常的比较函数:
        def max2(x,y):
        if x > y:
          return x
        else:
          return y

        res=max2(10,20)
        print(res)


      如果用三元表达式:

        x=10
        y=20
      res=x if x > y else y
      print(res)


    四、生成式

    1.列表生成式
      正常for循环生成列表:
      l=[]
      for i in range(10):
      if i > 4:
        l.append(i**2)
      print(l)
      
      列表生成式生成列表:
      l=[i**2 for i in range(10) if i > 4]
      print(l)

      也可以添加各种功能:
      names=['egon','alex_sb','kevin_sb','hxx_sb','cxx_sb']
      sbs=[name.upper() for name in names if name.endswith('sb')]

    2.字典生成式
      res={i:i**2 for i in range(10) if i > 3}
      print(res)

    3.集合生成式
      res={i for i in 'hello'}
      print(res)

    备注:
      元组不能用生成式

    五、匿名函数

      就是之定义了一个函数的内存地址,主要用于临时使用一次的场景
      自带ruturn功能,

      res=(lambda x,y:x+y)(1,2)
      print(res)

    一般不会单独用,和别的函数配合使用:

      排序:
      l=[4,2,3]
      l_new=sorted(l,reverse=True)
      print(l_new)


      salaries={
      'egon':3000,
      'alex':100000000,
      'wupeiqi':10000,
      'yuanhao':2000
      }


      print(sorted(salaries,key=lambda k:salaries[k],reverse=True))

  • 相关阅读:
    解决Fatal error: Allowed memory size of 33554432 bytes exhausted
    VS2008 LINK : fatal error LNK1000: Internal error during IncrBuildImage
    天天算法01——左旋转字符串
    二叉排序数的判定
    数据结构绪论思维导图
    痛苦!很痛苦!
    【转】qt交叉环境编译
    [转]linux联想Y450屏幕亮度调节
    【转载】arm指令
    HTTP请求和响应——GET与POST区别以及SOAP(网络整理)
  • 原文地址:https://www.cnblogs.com/zhangxin-/p/10045015.html
Copyright © 2011-2022 走看看