Discuss / Python / 作业

作业

Topic source

lostanother

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

第一题

import functools

def decorator(func):
  @functools.wraps(func)
  def wrapper(*args,**kw):
    print('begin call')
    result = func(*args,**kw)
    print('end call')
    return result
  return wrapper

@decorator
def prt():
  print('ok, sir! ')

prt()

第二题

import functools

def log(text = None):
  def decorator(func):
    @functools.wraps(func)
    def wrapper(*args,**kw):
      if text == None:
        print('call %s():' % func.__name__)
      else:
        print('%s %s():'%(text,func.__name__))
      result = func(*args,**kw)
      return result
    return wrapper
  return decorator

@log()
def prt():
  print('ok, sir! ')

prt()

同样不理解为什么@log后不加括号就会报错。初步猜测是因为之前的log是修饰函数能自动传输下面的函数作为参数,而这个函数log并非修饰函数时就需要加括号来执行该函数。先不管了以后再看吧。 还有一个也是楼下同学的问题,不清楚为什么有时候return func(args,*kw)能够执行func有时候却不能执行。


  • 1

Reply