【Python】@(アットマーク)の意味を簡単に解説

【Python】@(アットマーク)の意味を簡単に解説

公開: 更新:



Pythonにおける@(アットマーク)の意味

Pythonにおける@記号(アットマーク)は、デコレータと呼ばれる特殊な機能を表すために使用されます。デコレータは関数メソッド、クラスを別の関数で包み込み、元の定義を変更せずに機能を拡張できる機能です。@演算子は関数やクラスの定義の直前に配置され、その後に続く関数やクラスに装飾を行います。

【サンプルコード】
# シンプルなデコレータの例
def my_decorator(func):
    def wrapper():
        print("処理の前に何か実行")
        func()
        print("処理の後に何か実行")
    return wrapper

@my_decorator
def say_hello():
    print("こんにちは!")
【実行結果】
say_hello()
処理の前に何か実行
こんにちは!
処理の後に何か実行

上記のサンプルコードではmy_decorator関数がsay_hello関数をラップし、実行前後に処理を追加しています。@を使わない場合はsay_hello = my_decorator(say_hello)のように書く必要がありますが、@を使うことで読みやすく記述できます。

行番号 詳細説明
1行目 デコレータを定義するmy_decorator関数を宣言
2行目 ラッパ関数wrapper内で実行前にprintでメッセージを表示
3行目 ラップされる関数をfunc()で実行
4行目 実行後のメッセージをprintで表示
5行目 @my_decoratorでsay_hello関数をデコレータで装飾

【PR】『Python』を学べる企業・個人向けのプログラミングコース

Pythonの@(アットマーク)を使ったデコレータの応用例

Pythonのデコレータは引数を受け取る形で使用することが可能で、引数付きデコレータを作成するにはデコレータ関数を別の関数でラップする必要があります。この方法によってデコレータの動作をカスタマイズし、より柔軟なコード設計が出来るようになります。

【サンプルコード】
# 引数を取るデコレータの例
def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            result = None
            for _ in range(n):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"{name}さん、こんにちは!")
    return "挨拶完了"
【実行結果】
result = greet("田中")
田中さん、こんにちは!
田中さん、こんにちは!
田中さん、こんにちは!
print(result)
挨拶完了

@repeat(3)というデコレータを使用すると、greet関数が指定した回数だけ繰り返し呼び出されます。デコレータに引数を渡すことで振る舞いを切り替えられるため、さまざまな関数を汎用的にラップすること可能です。また、*args**kwargsを使えば、引数の形に依存しないデコレータにできます。

行番号 詳細説明
1行目 repeat関数を定義しデコレータ生成用のdecorator関数を返す
2行目 decorator関数がwrapper関数を返す
3行目 wrapper関数で指定回数だけfuncを呼び出す
4行目 最終呼び出しの結果をresultに格納し返す
5行目 @repeat(3)でgreet関数を装飾し引数を渡すデコレータを適用

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する