zoukankan      html  css  js  c++  java
  • 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(秒数) 运行时驻留秒数
  • 相关阅读:
    html5 geolocation配合百度地图api实现定位
    ES6 Symbol
    es2018(es9)前瞻
    Vue探索历程(一)
    数独游戏的难度等级分析及求解算法研究1——关于数独
    关于谋生的一些想法
    加密的pdf转换为jpg
    数独游戏的难度等级分析及求解算法研究2——数独难度等级
    NSString NSData char* NSInteger的转换
    根据文字多少自动设置UILabel的宽度高度
  • 原文地址:https://www.cnblogs.com/bigox/p/10713301.html
Copyright © 2011-2022 走看看