zoukankan      html  css  js  c++  java
  • 函数名,闭包,装饰器

    中心主题
    函数名      学名:第一对象
    def func():
    pass
    print(func) 查看函数名的内存地址
    函数名可赋值给其他变量 f = func
    函数名可以作为容器类变量的元素 [func,]等
    函数名可以作为函数的参数
    def func1(f):
    f()
    函数名可以作为函数的返回值
    def f():
    return func
    闭包
    内层函数,对外层函数(非全局)的变量的引用,叫做闭包
    def wrapper():
    name = 'alex'
    def inner():
    print(name)
    inner()
    判断方法
    在函数内使用print(inner.__closure__),cell--是闭包,None--不是
    闭包作用:python内部有一个机制,遇到闭包,
    他会在内存中开启一个内存空间,不会随着函数的结束而关闭
    避免内存空间的频繁开关,保护内存
    装饰器
    作用:在不修改代码的前提下增加函数功能
    简单的装饰器
    def timmer(f):
    def inner():
    start_time = time.time()
    time.sleep(0.1)
    f()
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return inner
    @timmer # func = timmer(func)
    def func():
    print('嘻嘻更健康')
    func() # inner()
    @ 语法糖
    @ 与被装饰函数紧密相连,中间不得有空行
    带有参数的装饰器
    def timmer(f):
    def inner(*args,**kwargs):
    start_time = time.time()
    time.sleep(0.1)
    f(*args,**kwargs)
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return inner

    @timmer # func = timmer(func)
    def func(a):
    print('%s嘻嘻更健康'%a)
    被装饰函数参数个数不等,因此内层函数使用不定长参数
    带有返回值的装饰器
    def timmer(f):
    def inner(*args,**kwargs):
    start_time = time.time()
    time.sleep(0.1)
    ret = f(*args,**kwargs) # 222
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return ret
    return inner

    @timmer # func = timmer(func)
    def func(a):
    return 222
    print(func('萌哥'))
    内层函数将被装饰的函数运行结果返回,外层函数将内层函数函数名返回
    通用装饰器
    def wrapper(func):
    def inner(*args,**kwargs):
    ret = func(*args,**kwargs)
    return ret
    return inner

    @wrapper
    def func():
    print(66)
    func()

  • 相关阅读:
    发现可高速缓存的 SSL 页面
    启用了不安全的HTTP方法
    目录遍历漏洞
    强强合体:Docker版Kali Linux发布
    Kali2.0 Sqlmap清除历史扫描日志
    OWASP-ZAP
    基于web的项目管理软件Redmine
    sqlmap用户手册
    Sqlmap基础(二)
    信息存储安全
  • 原文地址:https://www.cnblogs.com/2018-01-30/p/8405683.html
Copyright © 2011-2022 走看看