首页 > 其他分享 >装饰器

装饰器

时间:2022-10-11 16:12:02浏览次数:42  
标签:index 函数 inner time print 装饰 def

目录

前言

image

函数名的多种用法

image

# 1.函数名是名字
def index():
    pass
print(index)  # <function index at 0x000002EDA843E040>  # 函数名也是个名字 指向内存中的函数
index = 1
print(index)  # 1  # index这个名字现在指向 1 啦!
# 2.函数名可以当做函数的参数
def index():
    print('from index')
def func(a):  #  a=index 临时绑定
    a() # 执行index
func(index)  # from index
# 3.函数名可以作为函数的返回值
def index():
    print('from index')

def func():
    print('from func')
    return index  # 会去全局名称空间找index这个名字

res = func()  # res现在是index
print(res)
res()  # 相当于调用index函数
# 4.函数名可以当做容器类型的数据
def index():
    print('from index')

list1 = [1, 2, 3, 4, 'miku', index]  # 函数名也放里面了
list1[-1]()  # 用索引取出 然后调用index函数

闭包函数

image

def outer(name):
    def inner():  # inner是在函数内部的函数
        print(name)  # 内层函数用到了外部函数名称空间的名字name
    return inner

back = outer('miku')  # 传入miku name和miku绑定  # back是outer的返回值inner函数
back()  # 调用内部的inner函数 inner函数去外层找name 找到了miku 输出miku

back2 = outer('alice') 
back2() # alice

补充time模块 时间戳

# 1.基本使用
import time  # 意思是导入time这个模块
time.sleep(1)  # 意思是程序到这里停止1秒
# 2.时间戳
start_time = time.time()  # 获取当前时间戳
print(start_time)  # 1665415648.5771186  # 现在时间距离 1970年1月1日 的 秒数
time.sleep(2)
stop_time = time.time() # 再获取一次当前时间戳
print(stop_time - start_time)  # 2.0005736351013184

装饰器概念

image

装饰器模板

# 这就是一个装饰器outer 其实就是一个函数
def outer(func):
    def inner(*args, **kwargs):
        # 执行被装饰对象之前可以做的额外操作
        res = func(*args, **kwargs)
        # 执行被装饰对象之后可以做的额外操作
        return res
    return inner

使用装饰器模板

def outer(func_name):  # 装饰器
    def inner(*args, **kwargs):
        res = func_name(*args, **kwargs)
        return res

    return inner


def world(a):  # 被装饰函数
    print(a)
    return 'miku'


world = outer(world)  # inner狸猫换太子 这个world实际是内层的inner
back = world('hello') # 获取inner的返回值
print(back)  # miku

装饰器推导过程

image

标签:index,函数,inner,time,print,装饰,def
From: https://www.cnblogs.com/passion2021/p/16779356.html

相关文章

  • Python中的装饰器
     0前言千言万语抵不过一句话:“Matlab中可以使用Python.”今天修改代码过程中遇到装饰器语法,顺便总结一下以方便以后查看,也分享给大家,希望有帮助吧。装饰器(Decorato......
  • Python 函数装饰器
    fromtimeimportctime,sleepdeftsfunc(func):defwrappedFunc(a):print'[%s]%s()called,a=%s'%(ctime(),func.__name__,a)returnfunc()......
  • 自动生成路由,action装饰器,登录接口,认证
    自动生成路由action装饰器的使用登录接口编写认证自动生成路由补充:  1.只要继承了ModelViewSet就要在路由中as_view()内添加字典的形式#path('book......
  • python 装饰器
    python装饰器原文:https://blog.csdn.net/weixin_40576010/article/details/88639686装饰器的作用:在不改变原有功能代码的基础上,添加额外的功能,如用户验证等。@wrap......
  • 装饰器
    装饰器就是一个方法,可以注入到,类、方法、属性参数上来扩展他们的功能类装饰器(无法传参)(function(){functionfun1(target:any):void{target.prototype.name......
  • JAVA设计模式-装饰模式
    JAVA设计模式-装饰模式介绍装饰模式是一种结构型模式,在不改变现有对象结构的前提下,给现有对象添加新的功能,动态增加职责,是现有类的一个包装。角色Component:定义一......
  • python装饰器进阶指南
    前言最近一有时间就在整理自己常用的代码片段,并做成了私人pip包,正好整理到了装饰器的部分,所以就想着写篇文章来总结一下。写这篇文章的目的是为了让大家对装饰器有一个更......
  • Django中六个常用的自定义装饰器
    Django中六个常用的自定义装饰器 目录装饰器作用Django装饰器GroupRequiredAnonymousrequiredSuperuserrequiredAjaxrequiredTimeit自定义功能......
  • 【设计模式】29.结构型模式-装饰模式(Decorator)
    一、描述装饰模式能够在不改变原来对象结构和功能的前提下,动态的给对象增加新的功能,相比于使用子类扩展的方式,装饰模式更加的灵活。角色(1)抽象构件类:为具体构件类和装饰......
  • Java中装饰者模式
    装饰模式可以在不改变原来类中代码的基础上,增强类中的方法装饰类LDHWrapper和被装饰类LDH必须实现同个接口Star装饰类中要定义属性为:被装饰类对象,同时定义构造方法重写......