回答編集履歴
1
追記
answer
CHANGED
@@ -13,4 +13,51 @@
|
|
13
13
|
```
|
14
14
|
|
15
15
|
『関数を関数に渡す』のと『関数の返り値を関数に渡す』のとでは全く違う結果になります。
|
16
|
-
デコレータの働きは前者、ご提示のコードは後者です。
|
16
|
+
デコレータの働きは前者、ご提示のコードは後者です。
|
17
|
+
|
18
|
+
質問追記を受けて
|
19
|
+
---
|
20
|
+
> 私が書いたコードの場合、...という出力順になるという認識で合っていますでしょうか。
|
21
|
+
|
22
|
+
いちおう確認しておきますが、関数hoge内においてfuncは**呼び出されていません。**
|
23
|
+
```Python
|
24
|
+
def hoge():
|
25
|
+
print ("名前は、")
|
26
|
+
func # ← 呼び出さないと動かない
|
27
|
+
```
|
28
|
+
|
29
|
+
また、f2の返り値がf1に与えられているため、**funcの値は実際はNoneです。**
|
30
|
+
その点で、『func=(print("佐藤"))が実行される』という認識はちょっと怪しいです。
|
31
|
+
|
32
|
+
処理の順序は次のとおりです。
|
33
|
+
0. f2が引数 "佐藤" を与えられて実行される。
|
34
|
+
**f2の内部では引数 "佐藤" を出力する。**
|
35
|
+
0. その返り値 None がf1の引数として与えられて実行される。
|
36
|
+
0. f1内でhogeを定義し、それを引数なしで呼び出したものを返り値とする。
|
37
|
+
**hogeの内部では "名前は、" を出力する。**
|
38
|
+
ここでfuncは呼び出されていないし、そもそも呼び出せない。
|
39
|
+
|
40
|
+
---
|
41
|
+
> また、以下のようにした場合、期待通りの結果が得られるのですが、どうして上記コードと出力結果が異なるのかが理解できません。
|
42
|
+
> ```Python
|
43
|
+
> def f1(func):
|
44
|
+
def hoge():
|
45
|
+
print ("名前は、")
|
46
|
+
print (func)
|
47
|
+
return hoge()
|
48
|
+
|
49
|
+
|
50
|
+
> def f2(name):
|
51
|
+
return (name)
|
52
|
+
|
53
|
+
|
54
|
+
> f1(f2("佐藤"))
|
55
|
+
> ```
|
56
|
+
|
57
|
+
|
58
|
+
処理の順序は次のとおりです。
|
59
|
+
0. f2が引数 "佐藤" を与えられて実行される。
|
60
|
+
0. その返り値 "佐藤" がf1の引数として与えられて実行される。
|
61
|
+
0. f1内でhogeを定義し、それを引数なしで呼び出したものを返り値とする。
|
62
|
+
**hoge の内部では "名前は、" を出力する。**
|
63
|
+
**さらに、f1 に与えられた引数 "佐藤" を出力する。**
|