[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
2022-02-04 23:54:24
質問
Pythonで以下のような2つのデコレータを作るにはどうしたらよいでしょうか。
@makebold
@makeitalic
def say():
return "Hello"
...が返ってくるはずです。
"<b><i>Hello</i></b>"
を作ろうとしているわけではありません。
HTML
デコレータとデコレータチェイニングがどのように機能するかを理解しようとしているだけです。
どのように解決するのか?
チェックアウト ドキュメント で、デコレータがどのように動作するかを確認します。以下は、ご質問の内容です。
from functools import wraps
def makebold(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<b>" + fn(*args, **kwargs) + "</b>"
return wrapper
def makeitalic(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
return "<i>" + fn(*args, **kwargs) + "</i>"
return wrapper
@makebold
@makeitalic
def hello():
return "hello world"
@makebold
@makeitalic
def log(s):
return s
print hello() # returns "<b><i>hello world</i></b>"
print hello.__name__ # with functools.wraps() this returns "hello"
print log('hello') # returns "<b><i>hello</i></b>"
関連
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】Pythonのvirtualenvを離脱/終了/無効化する方法
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み] 複数の変数が1つの値に対して等しいかどうかをテストするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python Decorator 練習問題
-
Python jiabaライブラリの使用方法について説明
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].