プログラミングのpythonについてです。
def decor(func):
def wrap():
print("============")
func()
print("============")
return wrap
def print_text():
print("Hello world!")
decorated = decor(print_text)
decorated()
これを出力すると、
============
Hello world!
============
となるみたいなのですが、なぜなのか教えてほしいです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ソースを見ればある程度見当付くと思うのですが
①pythonでは「関数」を引数として受け取り実行できる。
②pythonでは「関数」を作成して戻り値として返すことができる。
③pythonでは「関数」が作られた時、その関数から「見えていた」変数を
その関数が後で実行される時、関数から参照できる。
特にわかりにくいのが③でクロージャと呼ばれる言語機能です。
Javascript等にもある割とメジャーな機能ではあるのですが、
本でゆっくりと踏み締めるように学んだ方が良いと思います。
No.1
- 回答日時:
Pythonでは、関数も「オブジェクト」です。
そのため
・変数に束縛する
・他の関数の引数に渡す
・戻り値として「関数」を返す
ことができます。
関数名 だけだと、関数のオブジェクトです。
後に() を付けて(必要なら引数も指定)すると、「関数を実行した戻り値」になります。
decor は、関数を引数にし、その受けとった関数を使った新しい関数オブジェクトを返します。
decorated = decor(print_text) では、decorで作った「print_text関数を使った関数」を 変数decorated に束縛しています。
decorated() でそれを実行しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 【Python初学者】以下コードについて教えていただきたいです 4 2023/04/19 13:01
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- 工学 Pythonの3次元描画に関する質問です 3 2022/12/07 20:07
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- Ruby プログラミング 3 2023/06/09 14:30
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- その他(プログラミング・Web制作) Pythonでのアニメーション 1 2023/06/01 15:58
- その他(コンピューター・テクノロジー) Pythonの np.indicesに関する質問です。 2 2023/02/07 08:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンのスクリーンセーバー...
-
Windows10 で青鬼を遊びたいの...
-
latexでのエラー
-
chatGPTで次々と質問をしていく...
-
PC版のMinecraftが応答なしにな...
-
Excel実行時エラー-2146959355?
-
エクセルVBA、ステップモードと...
-
COBOLで集団項目から符号...
-
VSコード
-
プログラムが書けません。
-
プロパティの値が不正ですって...
-
EXCEL-VBAでコマンド...
-
pythonで他のアプリを操作する...
-
プログラミングについてです。...
-
管理者として実行を毎回すると...
-
パソコンに何かが勝手にダウン...
-
eclipseで、「ポート番号が使用...
-
【急いでます!】pythonでキー...
-
execelのVBAでIEの操作
-
ATOMは何の略ですか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
Excel実行時エラー-2146959355?
-
パソコンのスクリーンセーバー...
-
chatGPTで次々と質問をしていく...
-
管理者として実行を毎回すると...
-
latexでのエラー
-
eclipseで、「ポート番号が使用...
-
PC版のMinecraftが応答なしにな...
-
エクセルVBA、ステップモードと...
-
VB.NETでボタンのクリックイベ...
-
EXCEL-VBAでコマンド...
-
至急!RedmiPadを文鎮化させて...
-
Windows10 で青鬼を遊びたいの...
-
プログラム実行中に強制停止さ...
-
プログラミングについてです。...
-
VSコード
-
COBOLで集団項目から符号...
-
pythonで他のアプリを操作する...
-
VB.NETでDataTableにデータ追加...
-
Flashゲームをホームページで楽...
おすすめ情報