pythonアクセサリーの使用方法の例
2389 ワード
pythonのアクセサリーとは何ですか?
ネットワーク上の定義:装飾器は関数を包装するための関数であり、元の関数を修飾し、元の識別子に値を再付与し、元の関数の参照を永久に失うために使用されます.
最も説明できる装飾器の例は以下の通りである.
pythonには@記号の文法糖が提供されており、上のコードを簡略化するために使用されています.彼らの役割は同じです.
この2セグメントのコードは同じで、等価です.
内蔵の3つの装飾器は、staticmethod、classmethod、propertyであり、クラスで定義された方法を静的方法、クラス方法、属性に変える役割を果たしています.以下のようにします.
装飾器のネスト:ネストの順序とコードの順序が逆の法則です.例を見てみましょう
返される結果は、hello worldはなぜこの結果なのか.1.まずhello関数はmakeitalic関数の装飾を経て、この結果hello world 2になった.そしてmakebold関数の装飾を経て、hello worldになりましたが、これは理解しやすいです.
ネットワーク上の定義:装飾器は関数を包装するための関数であり、元の関数を修飾し、元の識別子に値を再付与し、元の関数の参照を永久に失うために使用されます.
最も説明できる装飾器の例は以下の通りである.
#-*- coding: UTF-8 -*-
import time
def foo():
print 'in foo()'
# , ,
def timeit(func):
# ,
def wrapper():
start = time.clock()
func()
end =time.clock()
print 'used:', end - start
#
return wrapper
foo = timeit(foo)
foo()
pythonには@記号の文法糖が提供されており、上のコードを簡略化するために使用されています.彼らの役割は同じです.
import time
def timeit(func):
def wrapper():
start = time.clock()
func()
end =time.clock()
print 'used:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
foo()
この2セグメントのコードは同じで、等価です.
内蔵の3つの装飾器は、staticmethod、classmethod、propertyであり、クラスで定義された方法を静的方法、クラス方法、属性に変える役割を果たしています.以下のようにします.
class Rabbit(object):
def __init__(self, name):
self._name = name
@staticmethod
def newRabbit(name):
return Rabbit(name)
@classmethod
def newRabbit2(cls):
return Rabbit('')
@property
def name(self):
return self._name
装飾器のネスト:ネストの順序とコードの順序が逆の法則です.例を見てみましょう
#!/usr/bin/python
# -*- coding: utf-8 -*-
def makebold(fn):
def wrapped():
return "" + fn() + ""
return wrapped
def makeitalic(fn):
def wrapped():
return "" + fn() + ""
return wrapped
@makebold
@makeitalic
def hello():
return "hello world"
print hello()
返される結果は、hello worldはなぜこの結果なのか.1.まずhello関数はmakeitalic関数の装飾を経て、この結果hello world 2になった.そしてmakebold関数の装飾を経て、hello worldになりましたが、これは理解しやすいです.