• Python函数闭包装饰器


    x=2222
    print(x)
    def func1():
        x=65842
        def func2():
            x=65412
            print(x)
        func2()
    func1()
    print(x)
    2222
    65412
    2222

    global:调用全局变量

    x=8888
    def func1():
        def func2():
            global x
            x=10000000
        func2()
    func1()
    print(x)
    10000000

    local:调用外部变量

    def f1():
        x=1
        def f2():
            nonlocal x
            x=666
            print(x)
        f2()
    f1()
    666

    闭包函数:

    1.内部函数

    2.包含对外部作用域而非全局作用域的引用

    闭包函数特点:

    1.自带作用域

    2.延迟计算

    closure:

    name='alex'
    def func():
        name='egon'
        x=1000000000000000000000
        def bar():
            print(name)
            print(x)
            a=1
            b=2
        return bar
    f=func()
    print(f.__closure__[0].cell_contents)
    print(f.__closure__[1].cell_contents)
    egon
    1000000000000000000000

    例子:

    name='lyp'
    def func1():
        name='xiaobai'
        def func2():
            print(name)
        return func2
    func1=func1()
    func1()
    xiaobai
    
    money=8000
    def func1():
        money=6000
        def mo_info(name):
            print('%s有%s钱'%(name,money))
        mo_info('xiaobai')
    func1()
    xiaobai有6000钱
    
    def f0():
        name='henbai'
        def f1():
            money=6666
            def f2():
                print('xiaobai has %s'%(money))
                print(name)
            return f2
        return f1
    f0()()()
    xiaobai has 6666
    henbai

    装饰器:任意可调用对象,被装饰的对象也可以任意可调用对象

    功能:在不修改被修饰对象源代码以及调用方式的前提下为其添加新功能

    原则:

    1.不修改源代码

    2.不修改调用方法

    目标:添加新功能

    装饰器的语法:在被装饰对象的正上方的单独一行,@装饰器名字(将函数作为参数传给装饰器)

    执行顺序是自上而下,计算顺序是自下而上

    from urllib.request import urlopen
    def info(url):
        def pa_pr():
           return urlopen(url).read()
        return pa_pr
    pa_pr=info('http://www.baidu.com')
    print(pa_pr())
    
    import random
    import time
    def index():
        time.sleep(random.randrange(1,4))
        print('welcome to the page')
    def sp_time(haha):
        def time_d():
            start_time=time.time()
            haha()
            stop_time=time.time()
            print('runtime is %s'%(stop_time-start_time))
        return time_d
    index=sp_time(index)
    index()
  • 相关阅读:
    离场飞越转弯全家福
    画一个PBN大角度飞越转弯保护区
    画一个小角度飞越转弯保护区
    Point Estimation
    Random variable
    心流
    Survey sampling
    Distribution
    数学分析总结
    topological space
  • 原文地址:https://www.cnblogs.com/c491873412/p/7010568.html
Copyright © 2020-2023  润新知