• day13


     

     

    day13

    内容回顾

    • 传参:位置参数 > 关键字参数

    • 函数不被调用,内部代码永远不执行。

    • 每次调用函数时,都会为此次调用开辟一块内存,内存可以保存自己以后想要用的值。

    • 函数是作用域,如果自己作用域中没有,则往上级作用域找。

    1.装饰器

    在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能

    def func():
       def inner():
           return func
       return inner

    def index():
       print(123)
       
    func(index)



    @func
    def index():
       print(123)
       
    index()
    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)

    def func3():
       time.sleep(1.5)
       print(123)

    func1()
    def func():
       def inner():
           pass
       return inner

    v = func()
    print(v) # inner函数
    # #########################################
    def func(arg):
       def inner():
           print(arg)
       return inner

    v1 = func(1)
    v2 = func(2)

    # #########################################
    def func(arg):
       def inner():
           arg()
       return inner

    def f1():
       print(123)

    v1 = func(f1)
    v1()
    # ###########################################
    def func(arg):
       def inner():
           arg()
       return inner

    def f1():
       print(123)
       return 666

    v1 = func(f1)
    result = v1() # 执行inner函数 / f1含函数 -> 123
    print(result) # None
    # ###########################################
    def func(arg):
       def inner():
           return arg()
       return inner

    def f1():
       print(123)
       return 666

    v1 = func(f1)
    result = v1() # 执行inner函数 / f1含函数 -> 123
    print(result) # 666

    # ###########################
    def func():
       print(1)
       
    v1 = func
    func = 666
    # 示例
    def func(arg):
       def inner():
           print('before')
           v = arg()
           print('after')
           return v
       return inner

    def index():
       print('123')
       return '666'


    # 示例一
    """
    v1 = index() # 执行index函数,打印123并返回666赋值给v1.
    """
    # 示例二
    """
    v2 = func(index) # v2是inner函数,arg=index函数
    index = 666
    v3 = v2()
    """
    # 示例三
    """
    v4 = func(index)
    index = v4 # index ==> inner
    index()
    """

    # 示例四
    index = func(index)
    index()
    # 用法!!

    def func(arg):
       def inner():
           v = arg()
           return v
       return inner

    # 第一步:执行func函数并将下面的函数参数传递,相当于:func(index)
    # 第二步:将func的返回值重新赋值给下面的函数名。 index = func(index)
    @func
    def index():
       print(123)
       return 666

    print(index)
    # 课上示例

    # 计算函数执行时间

    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)

    def func3():
       time.sleep(1.5)
       print(123)

    func1()
    # 编写装饰器

    # 装饰器的编写
    def x(func):
       def y():
           # 前
           ret = func()
           # 后
           return ret
      return y

    # 装饰器的应用
    @x
    def index():
       return 10

    @x
    def manage():
       pass

    # 执行函数,自动触发装饰器了
    v = index()
    print(v)
    # 装饰器   编写格式

    def 外层函数(参数):
       def 内层函数(*args,**kwargs):
           return 参数(*args,**kwargs)
       return 内层函数


    # 装饰器   应用格式

    @外层函数
    def index():
       pass

    index()

    2 推导式

    1.列表推导式

    """
    目的:方便的生成一个列表。
    格式:
    	v1 = [i for i in 可迭代对象 ]
    	v2 = [i for i in 可迭代对象 if 条件 ] # 条件为true才进行append
    """
    v1 = [ i for i in 'alex' ]  
    v2 = [i+100 for i in range(10)]
    v3 = [99 if i>5 else 66  for i in range(10)]
    
    def func():
        return 100
    v4 = [func for i in range(10)]
    
    v5 = [lambda : 100 for i in range(10)]
    result = v5[9]()
    
    def func():
        return i
    v6 = [func 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)] # 新浪微博面试题
    # 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]
    
    # ##################### 筛选 #########################
    v9 = [i for i in range(10) if i > 5]

     

    2.集合推导式

    v1 = { i for i in 'alex' }

     

    3.字典推导式

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

     

  • 相关阅读:
    HashTable介绍
    java源码 -- HashSet
    java源码 -- AbstractList
    java源码 -- AbstractSet
    java源码 -- AbstractCollection抽象类
    java源码 --List、Set、Collection
    第五篇:SpringBoot整合Mybatis
    java源码 -- AbstractMap
    算法
    根据前序遍历和中序遍历求后序遍历
  • 原文地址:https://www.cnblogs.com/usherwang/p/12865738.html
Copyright © 2020-2023  润新知