Discuss / Python / 最后的思考题

最后的思考题

Topic source

关键在于判断传入的参数是字符串还是函数?

# !/usr/bin/env python3
# -*- coding: utf-8 -*-

'''
请再思考一下能否写出一个@log的decorator,使它既支持:
@log
def f():
    pass
又支持:
@log('execute')
def f():
    pass
'''

import functools

def log(both):
	if not isinstance(both, str):		#判断传入的参数是字符串还是函数
		@functools.wraps(both)
		def log1(*arg, **kw):
			print('call %s():' % both.__name__)
			return both(*arg, **kw)
		return log1
	else:
		def log2(fn):
			@functools.wraps(fn)
			def wrapper(*arg, **kw):
				print('%s %s():' % (both, fn.__name__))
				return fn(*arg, **kw)
			return wrapper	
		return log2

@log
def now1():
	print('2019-6-13')

now1()

@log('execute')
def now2():
	print('2019-6-13')

now2()

大写的尴尬,这是上一节的,发错了。。。。


  • 1

Reply