装饰器补充、三元表达式、生成式、匿名函数

导读:本篇文章讲解 装饰器补充、三元表达式、生成式、匿名函数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

 

一、叠加多个装饰器

  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(‘\n’).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))

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/6429.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!