回答編集履歴
3
よく考えたらサンプルになってなかった
answer
CHANGED
@@ -7,16 +7,21 @@
|
|
7
7
|
print('hoge')
|
8
8
|
|
9
9
|
def spam_ham(func):
|
10
|
+
print('spam')
|
10
11
|
func()
|
12
|
+
print('ham')
|
11
13
|
|
12
14
|
spam_ham(hoge)
|
13
15
|
|
14
16
|
"""実行結果
|
17
|
+
spam
|
15
18
|
hoge
|
19
|
+
ham
|
16
20
|
"""
|
17
21
|
```
|
18
22
|
|
19
23
|
関数の実行結果が渡されるわけではありません。
|
24
|
+
(実行されてから渡されるなら、第一行目にhogeと表示されるはず)
|
20
25
|
|
21
26
|
---
|
22
27
|
上記の例に加えて、こちらの例も示したいと思います。
|
2
追記
answer
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
> これはつまりscramble()の引数potatoは関数で、
|
2
|
+
> 関数が呼ばれてeggがreturnされ、scramble()の引数にeggが入ったということでしょうか?
|
3
|
+
|
1
|
-
Pythonでは、**関数そのもの**を渡すことが可能です。
|
4
|
+
その認識は異なります。Pythonでは、**関数そのもの**を渡すことが可能です。
|
2
5
|
```Python
|
3
6
|
def hoge():
|
4
7
|
print('hoge')
|
@@ -24,9 +27,13 @@
|
|
24
27
|
func = fuga # 関数を代入
|
25
28
|
text = fuga() # 関数の実行結果を代入
|
26
29
|
|
30
|
+
print(type(func)) # <class 'function'>
|
31
|
+
print(type(text)) # <class 'str'>
|
32
|
+
|
27
33
|
func() # 関数は呼び出せる
|
28
34
|
# text() # 関数じゃないから呼び出せない
|
35
|
+
```
|
29
36
|
|
30
|
-
print(type(func)) # <class 'function'>
|
31
|
-
print(type(text)) # <class 'str'>
|
32
|
-
|
37
|
+
---
|
38
|
+
これ以降、デコレータとは何ぞや、クロージャとは何ぞや、という理解が必要ですが、
|
39
|
+
そちらに関しましてはYouheiSakuraiさんの非常に丁寧かつ明確な回答をご覧ください。
|
1
追記
answer
CHANGED
@@ -13,4 +13,20 @@
|
|
13
13
|
"""
|
14
14
|
```
|
15
15
|
|
16
|
-
関数の実行結果が渡されるわけではありません。
|
16
|
+
関数の実行結果が渡されるわけではありません。
|
17
|
+
|
18
|
+
---
|
19
|
+
上記の例に加えて、こちらの例も示したいと思います。
|
20
|
+
```Python
|
21
|
+
def fuga():
|
22
|
+
return 'fuga'
|
23
|
+
|
24
|
+
func = fuga # 関数を代入
|
25
|
+
text = fuga() # 関数の実行結果を代入
|
26
|
+
|
27
|
+
func() # 関数は呼び出せる
|
28
|
+
# text() # 関数じゃないから呼び出せない
|
29
|
+
|
30
|
+
print(type(func)) # <class 'function'>
|
31
|
+
print(type(text)) # <class 'str'>
|
32
|
+
```
|