python双下划线函数

def func(f):
    def inner(*args, **kwargs):
        print('1')
        ret = f(*args, **kwargs)
        print('2')
        return ret
    return inner

@func
def asd(bool):
    print('%s'%bool)
    return 'a'

print(func.__name__)
print(asd.__name__)

func
inner

 

__name__被调用为函数名(返回字符串)

如果是在装饰器里面,那么asd会被inner代替

 

解决这个问题

from functools import wraps
def func(f):
    @wraps(f)
    def inner(*args, **kwargs):
        print('1')
        ret = f(*args, **kwargs)
        print('2')
        return ret
    return inner

@func
def asd(bool):
    print('%s'%bool)
    return 'a'

print(func.__name__)
print(asd.__name__)

 

__doc__被调用显示函数说明(返回字符串)

def asd(bool):
    '''这是asd函数'''
    print('%s'%bool)
    return 'a'
print(asd.__doc__)

这是asd函数

 

转载于:https://www.cnblogs.com/daoyueweiku/p/9705542.html

你可能感兴趣的:(python双下划线函数)