Python:如何在decorator中处理函数参数?

2024-05-29 04:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着使用装饰,发现他们有点酷,但我不完全明白里面发生了什么。让我们假设一个简单的例子,我借用了其中一页关于decorators的内容

def p_decorate(func):
   def func_wrapper(name):
       return "<p>{0}</p>".format(func(name))
   return func_wrapper


def get_text(name):
   return "lorem ipsum, {0} dolor sit amet".format(name)


get_text = p_decorate(get_text)
print(get_text("John"))

p_decorate函数中让我困惑的是,name参数是从哪里来的?我将描述我是如何理解这个过程的

  1. 我们创建一个带有name参数的get_text函数
  2. 我们用一个func参数创建装饰函数p_decorate,这个参数显然就是我们的get_text函数
  3. 当我们调用p_decorate(get_text)时,p_decoratefunc参数就变成了get_text函数
  4. 内部func_wrapper函数可以访问外部作用域,因此它可以根据需要处理func(又称get_text)。但是它怎么知道nameget_text参数呢?此外,它从哪里得到这个论点(因为它不抱怨name的缺失)?毕竟,我们不把它提供给get_text

Tags: 函数textnamedecoratorsformat内容参数get
1条回答
网友
1楼 · 发布于 2024-05-29 04:21:01

在本例中,name将成为传递给函数的参数。在其他情况下,如果我们对函数了解不多,我们可以使用*args**kwargs,其中您的decorator中有name。一个相当简洁的解释实际上存在于here

相关问题 更多 >

    热门问题