Heim  >  Artikel  >  Backend-Entwicklung  >  Eine ausführliche Erklärung der Python-Dekoratoren

Eine ausführliche Erklärung der Python-Dekoratoren

黄舟
黄舟Original
2017-10-01 07:44:051427Durchsuche

In diesem Artikel geht es hauptsächlich darum, die relevanten Informationen zu Python-Dekoratoren auf einfache und leicht verständliche Weise zu erlernen. Er hat einen gewissen Referenzwert.

Ich habe bereits etwas über Dekoratoren gelernt. Aber ich weiß ein wenig darüber und weiß nicht, wie ich es nennen soll. Ich möchte nur das aktuelle Projekt optimieren, also habe ich darüber nachgedacht, Dekoratoren zu verwenden, also habe ich die Dekoratoren eingehend studiert Werfen wir zunächst einen Blick auf den Code:


Ich bezweifle, dass es sich bei dem, was zurückgegeben wird, offensichtlich um einen Funktionsnamen handelt. Logischerweise handelt es sich bei dem, was zurückgegeben wird, um eine Funktionsadresse ! Stimmt etwas mit meinem Verständnis nicht? Dann habe ich die Informationen im Internet überprüft und es war wieder geschlossen.... Aber ich persönlich habe es selbst analysiert und ein Programm zusammengefasst Programm:
import time


# 将函数作为参数传入到此方法....
def timeif(func):
  def wrapper(arg):
    print("in wrapper() %s" % (arg))
    start = time.clock()
    func(arg)
    end = time.clock()
    print("used: %s %s" % (end-start, arg))
  return wrapper


@timeif
def foo(arg):
  print("in foo() %s" % (arg))


if __name__ == '__main__':
  foo(" Hello ") # 表示执行foo函数....



Sieht das nicht aus wie unser Dekorateur? Das ist unser Dekorateur! Daher können wir es gemäß dem obigen Programm verstehen, was bedeutet, dass es zuerst die Anzahl der Parameter bestimmt und diese dann separat übergibt. Als nächstes schreiben wir den Code neu:

# coding=utf-8
# 带参数的函数 返回一个函数地址就行....
def funX(x):
  def funY():
    return x
  return funY


# 不带参数的函数....
def funX1():
  print("调用函数funX1")

  def funY1():
    print("调用函数funY1")
  return funY1


if __name__ == '__main__':
  # print(funX(5)()) # 调用有参数的嵌套函数...
  
  print(funX1()()) # 调用无参数的嵌套函数...


# coding=utf-8
import time


# 将函数作为参数传入到此方法....
def timeif(func):
  def wrapper(arg):
    print("in wrapper() %s" % (arg))
    start = time.clock()
    func(arg)
    end = time.clock()
    print("used: %s %s" % (end-start, arg))
  return wrapper


# @timeif
def foo(arg):
  print("in foo() %s" % (arg))


if __name__ == '__main__':
  timeif(foo)(' Hello')

Das obige ist der detaillierte Inhalt vonEine ausführliche Erklärung der Python-Dekoratoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn