Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 你把装饰师放在哪里;我写的?_Python_Decorator_Python Decorators - Fatal编程技术网

Python 你把装饰师放在哪里;我写的?

Python 你把装饰师放在哪里;我写的?,python,decorator,python-decorators,Python,Decorator,Python Decorators,我正在试着写我的第一个装潢师。我已经看过很多关于它的视频教程和博客文章,但是我没有看到任何关于在哪里放置装饰器以便被装饰的功能可以找到它的内容。这似乎很基本,也许对那些以前做过的人来说是“显而易见”的,但既然那不是我,我在问。注意,我不是问把@decorator放在哪里。我知道这是在被装饰的功能上面的一行。但是装饰器本身必须被编写并放置在@syntax可以找到并应用它的地方。我见过的所有示例都在同一个文件或脚本中,但我从未在实际操作中见过这样的装饰器,也没有见过将其引入应用程序的导入语句。那么它

我正在试着写我的第一个装潢师。我已经看过很多关于它的视频教程和博客文章,但是我没有看到任何关于在哪里放置装饰器以便被装饰的功能可以找到它的内容。这似乎很基本,也许对那些以前做过的人来说是“显而易见”的,但既然那不是我,我在问。注意,我不是问把@decorator放在哪里。我知道这是在被装饰的功能上面的一行。但是装饰器本身必须被编写并放置在@syntax可以找到并应用它的地方。我见过的所有示例都在同一个文件或脚本中,但我从未在实际操作中见过这样的装饰器,也没有见过将其引入应用程序的导入语句。那么它应该在哪里,装饰过的应用程序/python如何找到它呢?

装饰程序只是一个可调用的函数,通常是一个函数。这意味着您可以在任何需要其他函数的地方定义它,并以相同的方式导入它

from mydecorators import mydecorator

@mydecorator
def f():
    ...

由于模块级类或函数的修饰发生在导入时,因此必须在使用之前解析名称。这将禁止在使用decorator后定义或导入它,这将像往常一样成为
namererror
异常。

您可能知道,decorator只是一个函数,与任何其他函数一样。所以你放置它就像放置任何其他函数一样

  • 在同一个文件中
  • 在另一个文件中。在这种情况下,您还需要导入函数

  • 这里有一个从functools import-wraps的标准库
    导入的内容,我选择了wim,因为他有点详细,但你们都很快。显然,当我说我从未见过它进口时,我只想到了内置的。活到老学到老!