Python基础(day12)

day12

主要内容

  • 装饰器

  • 推导式

  1. 装饰器

    # 语法
    '''
    装饰器; 在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能
    应用:
        1. 计算函数时间
        2. ......
    语法格式:
        # 装饰器的编写
        def x(func):
            def y():
                ret = func
                return ret
            return y
        # 装饰器的应用
        @x
        def index():
            pass
        @x
        def manage():
            pass
        # 执行函数,自动触发装饰器
        index()
        manage()
    应用场景:
        想要为函数扩展功能时,可以选择装饰器
    标准编写格式:
        def 外层函数(参数):
            def 内层函数(*args,**kwargs):
                return 参数()
            return 内层函数
    标准函数应用:
        @外层函数
        def 参数():
            pass
        参数()
    '''
    def func(arg):
        def inner():
            print('before')
            v = arg()
            print('after')
            return arg()
        return inner
    @ func
    # 第一步,执行func函数并将下面的函数参数传递,相当于func(index)
    # 第二步, 将func的返回值重新赋值给下面的函数名,相当于index = func(index)
    def index():
        print('123')
        return 666
    v = index()
    print(index)
    
'''
装饰器应用: 计算函数执行时间
'''

import  time
def wrapper(func):
    def inner():
        start_time = time.time()  # 获取当前时间
        v = func()
        end_time = time.time()  # 获取当前时间
        print(end_time - start_time)
        return v
    return inner

@ wrapper
def func1():
    time.sleep(2)
    print(123)
@ wrapper
def func2():
    time.sleep(2)
    print(123)
@ wrapper
def func3():
    time.sleep(2)
    print(123)
func1()
func2()
func3()
'''
装饰器应用:基线框架
'''
# 装饰器
def func(arg):
    def inner():
        print('已登录')
        v = func
        return v
    return inner

# 功能函数
@func
def f1():
    print('新增功能')
    return 0
@func
def f2():
    print('删除功能')
    return 0
@func
def f3():
    print('更新功能')
    return 0
f1()
f2()
f3()
  1. 推导式

    • 列表推导式

      • 基本格式

        '''
        目的: 方便的生产一个列表
        格式:
        	v= [i for i in 可迭代对象]
        	v= [i for i in 可迭代对象 if 条件] # 条件为真时执行append
        '''
        vlas = [ i for i in 'llk'] # 集合
        print(vlas)
        # 变量 = [ for循环的变量 for循环一个可迭代对象]
        v1 = [i for i in range(10)]
        print(v1)
        v2 = [i+100 for i in range(10)]
        print(v2)
        v3 = [99 if i>5 else 66 for i in range(10)]
        print(v3)
        
        def func():
            return 123
        v4 = [func for i in range(10)]
        
        v5 = [lambda : 100 for i in range(10)]
        result = v5[0]()
        
        def funa():
            return i
        v6 = [funa for i in range(10)]
        result = v6[5]()
        
        v7 = [lambda : i for i in range(10)]
        result = v7[5]()
        
        v8 = [lambda x:x*i  for i in range(10)] # 新浪微博面试题
        
        # 面试题
        def num():
            return [lamba x:i*x for i in range(4)]
        # num() -> [函数,函数,函数,函数]
        print ([ m(2) for m in num() ]) # [6,6,6,6] 
        
        
    • 集合推导式

      '''
      目的: 方便的生产一个集合
      格式:
      	v= {i for i in 可迭代对象}
      	v= {i for i in 可迭代对象 if 条件} 
      '''
      
    • 字典推导式

      '''
      目的: 方便的生产一个字典
      格式:
      	v= {'k' + str(i):i for i in 可迭代对象}
      
      '''
      

猜你喜欢

转载自www.cnblogs.com/lilangkui/p/12688678.html