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函数

猜你喜欢

转载自www.cnblogs.com/daoyueweiku/p/9705542.html