パイソンの30日間👨💻 - デコレータ
今日は面白い話題、デコレータを探った.Pythonでオブジェクト指向プログラミングを試みている間、私はデコレーターのカップルを適用しました
デコレータはプログラミングパターンです.デコレータは、単に変装の機能です.
デコレータを使用すると、関数に追加機能を追加したり、スーパーを充電することが可能です.
私は、彼らがどのようにフードの下で働くか、そして、彼らがなぜ役に立つことができるかについて、私自身の明快な用語で説明しようとします.
クールなPythonライブラリの多くは、デコレーターの広範な使用を行い、それが魔法であるかのように感じることができます.しかし、デコレータを理解するためには、いくつかの概念を理解する必要がある.
一等市民としての機能
機能は、Pythonの一流の市民です.基本的には、他のデータ型と同様に関数を変数に割り当てることができ、他の値と同じように関数として渡すことができます.JavaScriptの世界でも、機能は似たような振る舞いをしています.
高次関数
関数は高次関数と呼ばれます. 引数として別の関数を受け取ります(パラメータ) 別の関数を返す 両方
カスタムデコレータ
さて、上記の原理を使用して、カスタムデコレータがどのように見えるかがここにあります
Pythonインタプリタは
JavaScriptユニバースと比較すれば、JavaScriptは言語の一部としてデコレータを持っていません.しかし、JavaScriptのスーパーセットであるTypesScriptは、デコレータのこの概念を持っています.角のようなフレームワーク、NESTJSはデコレータに大きく依存します.
デコレータ関数は引数を受け付けたり、渡された引数に基づいてカスタマイズすることもできます.
デコレータがなぜ有用か?
デコレータは重要なプログラミングパターンであり、賢明に使用される場合、多くの利点を提供することができます.これは非常に再利用可能なコードを作成し、関数に追加機能をバインドするので、コードを乾燥させます.
Pythonのデコレータについてもっと知りたい参考文献 https://www.programiz.com/python-programming/decorator https://realpython.com/primer-on-python-decorators/ 今日はこれで終わりです.明日、Pythonでのエラー処理技術について調べます.先のもう一つの重要な話題.
その時まで
すばらしいものを持ってください!
@classmethod
and @staticmethod
, しかし、私はその時詳細にそれらを通過しませんでした.デコレータはプログラミングパターンです.デコレータは、単に変装の機能です.
デコレータを使用すると、関数に追加機能を追加したり、スーパーを充電することが可能です.
私は、彼らがどのようにフードの下で働くか、そして、彼らがなぜ役に立つことができるかについて、私自身の明快な用語で説明しようとします.
クールなPythonライブラリの多くは、デコレーターの広範な使用を行い、それが魔法であるかのように感じることができます.しかし、デコレータを理解するためには、いくつかの概念を理解する必要がある.
一等市民としての機能
機能は、Pythonの一流の市民です.基本的には、他のデータ型と同様に関数を変数に割り当てることができ、他の値と同じように関数として渡すことができます.JavaScriptの世界でも、機能は似たような振る舞いをしています.
def multiplier(num1, num2):
return num1 * num2
some_variable = multiplier # (a reference to the function is created)
del multiplier # (deletes the function)
print(some_variable(2,4)) # 8 (still able to call the function!)
この機能を値として渡す能力は、Pythonのデコレータの作成に不可欠です.高次関数
関数は高次関数と呼ばれます.
def logger(func, args): # higher order function
print(f'The result of the passed function is {func(*args)}')
def sum(num1, num2):
return num1 + num2
logger(sum, (1, 5))
def random(): # Higher order function
def special():
print('I am something special')
return special
random_value = random()
random_value() # I am something special
# One line way
random()() # I am something special
カスタムデコレータ
さて、上記の原理を使用して、カスタムデコレータがどのように見えるかがここにあります
def starmaker(func):
'''
A decorator function which accepts a function
and then wraps some goodness into it and
returns it back!
'''
def wrapper():
func()
print('You are a star now!')
print('*********')
return wrapper
@starmaker
def layman():
print('I am just a layman')
layman()
StarMakerデコレータ機能は、素人機能に超大国を与えた.これは基本的に関数のラッパーを追加しました.さて、このDecorator @ starmakerは、どんな機能の上にでも加えられることができます、そして、その機能はスターになります!本当にクール.Pythonインタプリタは
@decoratorname
そしてリアルタイムで関数に変換して処理します.上記のコードは、@decorator
構文def starmaker(func):
'''
A decorator function which accepts a function
and then wraps some goodness into it and
returns it back!
'''
def wrapper():
func()
print('You are a star now!')
print('*********')
return wrapper
def layman():
print('I am just a layman')
starmaker(layman)() # This is the underlying decorator magic!
私が最初に非常に混乱したとき、私はデコレーターに遭遇しました.しかし、その根底にある原理を根絶した後、それは第二の天性になり、私は私の精神モデルに追加することができました.JavaScriptユニバースと比較すれば、JavaScriptは言語の一部としてデコレータを持っていません.しかし、JavaScriptのスーパーセットであるTypesScriptは、デコレータのこの概念を持っています.角のようなフレームワーク、NESTJSはデコレータに大きく依存します.
デコレータ関数は引数を受け付けたり、渡された引数に基づいてカスタマイズすることもできます.
def emojifier(func):
def wrapper(emoji):
# kwags are keyword arguments
print(emoji)
func()
return wrapper
@emojifier
def random():
pass
random('😀') # 😀
デコレータがなぜ有用か?
デコレータは重要なプログラミングパターンであり、賢明に使用される場合、多くの利点を提供することができます.これは非常に再利用可能なコードを作成し、関数に追加機能をバインドするので、コードを乾燥させます.
# Create an @authenticated decorator that only allows
# the function to run is user1 has 'valid' set to True:
test_user = {
'name': 'Jackson',
'valid': True
}
another_user = {
'name': 'Nathan',
'valid': False
}
def authenticated(fn):
def wrapper(*args, **kwargs):
if args[0]['valid']:
fn(args)
return wrapper
@authenticated
def message_friends(user):
print('message has been sent')
message_friends(test_user) # message has been sent
message_friends(another_user) # (Does nothing)
上記の認証されたDecorator関数は、指定された条件に基づいてMessageRange Friends関数を呼び出します.これは、多くの柔軟性を与えて、ユーザーの認証の状態に基づいて条件つきの操作を実行します.Pythonのデコレータについてもっと知りたい参考文献
その時まで
すばらしいものを持ってください!
Reference
この問題について(パイソンの30日間👨💻 - デコレータ), 我々は、より多くの情報をここで見つけました https://dev.to/arindamdawn/30-days-of-python-day-13-decorators-eg5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol