返回顶部

python 装饰器和推导式的基本应用

装饰器&推导式

  • 传参位置参数在前,关键词参数在后

  • 函数不被调用内部代码不被执行

  • 函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰

    #经典案例
    def func(num):
        def inner():
            print(num)
        return inner
    result = []
    for i in range(10):
        f = func(i)
        result.append(f)
    v1 = result[0]()
    v2 = result[9]()
    print(v1,v2)
    

1.装饰器

  • 装饰器:在不改变原函数内部代码也不改变调用方式的基础上,在执行函数之前和之后自动执行某个功能.

1.1基本结构

def 外层函数(参数):
    def 内层函数(*args,**kwargs);
    	return 参数(*args,**kwargs)
   	return 内层函数
@外层函数
def index()
	pass	
#示例:
def func(arg):
    def inner():
        v = arg()
        return v 
    return inner 
@func 
def index():
    print(123)
    return 666

print(index)
  • @func :执行func函数把下面色函数当做参数传递,相当于:func(index)
  • 将外层函数的返回值(内层函数)重新赋值给下面的函数名index,index = func(index)

1.2装饰器基本应用

应用场景:想要为函数扩展功能时,使用装饰器

  • 计算运行时间

    • 时间模块:time.time()获取当前时间
    • time.sleep('秒数')睡眠
    # 计算函数执行时间
    
    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(1)
        print(123)
    func1()
    

2.推导式

2.1列表推导式

  • 方便生成一个列表

  • 基本格式

    # 变量 = [元素 for 元素 in 可迭代对象]
    # 变量 = [元素 for 元素 in 可迭代对象 if 条件]  **条件为True时元素才能添加到列表
    lis = [i for i in 'bigox']
    print(lis)
    
    lis = [i+100 for i in rang(10)]
    print(lis)
    
    lis = [99 if i>5 else 66 for i in range(10)]
    print(lis)
    
# 题
v8 = [lambda x:x*i for i in range(10)] 
# 1.请问 v8 是什么?
# 2.请问 v8[0](2) 的结果是什么?

# 题
def num():
    return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]

2.2集合推导式

  • 参照列表推导式,注意集合不能重复

    # 变量 = {元素 for 元素 in 可迭代对象}
    # 变量 = {元素 for 元素 in 可迭代对象 if 条件}  **条件为True时元素才能添加到列表
    

2.3字典推导式

  • 基本格式

    dic = {'k'+str(i) for i in range(10)}
    

小结

  • 装饰器
    • 书写格式
    • 原理
    • 应用格式
  • 推导式
  • 内置模块
    • time.time() 获取当前时间,具有返回值
    • time.sleep(秒数) 运行时驻留秒数
posted @ 2019-04-15 21:28  高薪程序员  阅读(213)  评论(0编辑  收藏  举报