Discuss / Python / 比较简洁的一种写法

比较简洁的一种写法

Topic source

灰_手

#1 Created at ... [Delete] [Delete and Lock User]

装饰器代码:

import functools

def log(text):
    def inter(func):        
        @functools.wraps(func)
        def warpper(*args, **kw):
            print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" % text, func.__name__))
            result = func(*args, **kw)
            print('end call: result is %s' % result)
            return result
        return warpper
    return inter(text) if callable(text) else inter

测试例1:

@log
def my_sum(*args):
    return sum(args)
result = my_sum(*range(101))
print(result)

例1输出:

begin call: log(my_sum)
end call: result is 5050
5050

测试例2:

@log('execute')
def my_sum(*args):
    return sum(args)
result = my_sum(*range(101))
print(result)

例2输出:

begin call: log('execute')(my_sum)
end call: result is 5050
5050

弦论不定

#2 Created at ... [Delete] [Delete and Lock User]
print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" % text, func.__name__))

好像少了个()

print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" %(text, func.__name__)))

灰_手

#3 Created at ... [Delete] [Delete and Lock User]

如果你非要加括号,应该这样加

print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" %(text), func.__name__))

hacklinshell

#4 Created at ... [Delete] [Delete and Lock User]

return inter(text) if callable(text) else inter

这句应该怎么理解? 我理解错误了 如果log函数传入了text参数,那么可以被调用,就返回inter(text)

然后打印的时候 print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" % text, func.name))

如果传入text参数,那么可以被调用,就按照格式log%s(%s) 输出,哪里理解错误了

hacklinshell

#5 Created at ... [Delete] [Delete and Lock User]

我理解了,是我理解错误了,没有理解callable(text)
如果没有参数那么callable返回的是TRUE

灰_手

#6 Created at ... [Delete] [Delete and Lock User]

callable是判断text是否可调用

print('begin call: log%s(%s)' % ('' if callable(text) else "('%s')" % text, func.name))

这句话的意思是当text是函数时打印log(func.name),而当text是装饰器的参数时就打印log(text)(func.name)

if 前面的''是什么意思呢?我看了半天也没看懂,还有else后面接的前后双引号也不太懂

灰_手

#8 Created at ... [Delete] [Delete and Lock User]

相当是这四句,''是空字符串都不懂?单引号和双引号括起一个字符串也不懂?那你应该重修字符串的课程了。 if callable(text): print("begin call: log(%s)" % (func.name)) else: print("begin call: log('%s')(%s)" % (text, func.name))


  • 1

Reply