python装饰器内获取函数有用信息方法

装饰器内获取函数有用信息方法

.__doc__用于得到函数注释信息
.__name_用于得到函数名

在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc__或__name_的时候得到的是,装饰器内部函数的注释信息和名字。因为函数名被替换了。
所以想得到实际的内容,需要引用一个模块,from functools import wraps,并在装饰器函数内部再加一个@wraps的形式改变,得到实际想得到的信息。

作用是在函数加上装饰器后让能够得到真正原来的注释信息及函数名

  举例:
    from functools import wraps

    def logger(f):
    @wraps(f)
    def inner(*args, **kwargs):
    """
    :param args: 函数名,密码
    :param kwargs: 备用
    :return: True
    """
    ret = f(*args, **kwargs)
    return ret
    return inner

    @logger
    def login(username,password):
    """
    此函数是完成登录功能的函数,需要用户名,和密码两个参数,返回True 登陆成功
    :return: True
    """
    print(666)
    return True
    # login(1,2) #inner()
    # # login(‘alex‘, 123)
    print(login.__doc__)
    print(login.__name__)

原文地址:https://www.cnblogs.com/liujiyu/p/9142028.html

时间: 2024-08-02 15:29:49

python装饰器内获取函数有用信息方法的相关文章

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

python登录加随机验证码校验程序(装饰器内置函数的理解)

使用说明:为了防止恶意攻击,同时不对原先用户登录验证的方法代码进行改动,在检验账号密码方法外再套一层校验方法(验证码),过滤非人为的攻击. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- import os import json import random ###取得绝对路径下的账号密码文件 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) filepa

装饰器 内置函数

1.装饰器 它在不改变原有的函数的代码和调用方式,给他添加新功能. 1.函数即变量 2.def func(func1): func1() 3.函数里面也可以嵌套函数 装饰器本身就是一个函数 高阶函数+函数嵌套 = 装饰器 2.内置函数 i = int('345')#转换int类型 fl = float('2.1')#转换float类型 dic =dict(k=1,v=2)#转换成字典 lis = list('1,2,3')#转换成list new_set = set(lis) def say()

python装饰器-如何使用函数装饰器

如何使用函数装饰器 问题举例 有时候我们想为多个函数统一添加某种功能,比如计时统计.记录日志,缓存运算结果等: 我们并不想在每个函数内一一添加完全相同的代码,有什么解决方案吗? 解决思路 定义装饰器函数,用它在原函数的基础上生成一个添加新功能的函数来代替原函数 代码 def memo(func): cache = {} def wrap(*args): res = cache.get(args) if not res: res = cache[args] = func(*args) return

Python装饰器和回调函数

1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(func): @functools.wraps(func) def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print

python 装饰器调用其他类中的方法

场景: 做自动化是,每次都需要调用登录方法,代码重复比较多,在这种场景下,将登录功能抽取为装饰器demo class Test: data= get_yaml_date_by_fillter(filename ='warehouse_case.yaml',filter='whpage') @ddt.data(*data) @login def test_OpenWareHouse_Info(self,data): try: for key in data: result = WarehouseI

python 装饰器统计某个函数的运行时间

import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime.now() # 程序开始时间 func() over_time = datetime.datetime.now() # 程序结束时间 total_time = (over_time-start_time).total_seconds() print('程序共计%s秒' % total_time) r

Python 装饰器的形成过程

装饰器  定义:本质是函数,(装饰其他函数),即为其他函数添加附加功能.  原则: 1.不能修改被装饰的函数的源代码:            2.不能修改被装饰的函数的调用方式. 实现装饰器知识储备:   1. 函数即'变量'           2. 高阶函数       a. 把一个函数名当作实参传递给另一个函数(在不修改被装饰函数源代码的前提下为其添加新功能)       b. 返回值中包含函数名(不修改函数的调用方式)   3. 嵌套函数 高阶函数 + 嵌套函数 (组成)--> 装饰器

python装饰器简介

在了解装饰器的之前一定要先了解函数作为参数传递, 什么是函数内嵌,请参考我之前写的博客函数简介 python装饰器思想有点类似设计模式的装饰模式, 其意图是动态地给函数对象添加额外的功能.比如像增加日志打印的功能,有点面向切面编程(AOP)的感觉. 装饰器语法 以@开头,接着后面跟着的是装饰器的名字和可选的参数.装饰器语法是一种语法糖. 格式如下 @decomaker(deco_args) def foo(func_opt_args) 可以组合,等价于foo = g(f(foo)) @g @f