回答編集履歴

3

よく考えたらサンプルになってなかった

2017/12/08 10:41

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -16,7 +16,11 @@
16
16
 
17
17
  def spam_ham(func):
18
18
 
19
+ print('spam')
20
+
19
21
  func()
22
+
23
+ print('ham')
20
24
 
21
25
 
22
26
 
@@ -26,7 +30,11 @@
26
30
 
27
31
  """実行結果
28
32
 
33
+ spam
34
+
29
35
  hoge
36
+
37
+ ham
30
38
 
31
39
  """
32
40
 
@@ -35,6 +43,8 @@
35
43
 
36
44
 
37
45
  関数の実行結果が渡されるわけではありません。
46
+
47
+ (実行されてから渡されるなら、第一行目にhogeと表示されるはず)
38
48
 
39
49
 
40
50
 

2

追記

2017/12/08 10:41

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,4 +1,10 @@
1
+ > これはつまりscramble()の引数potatoは関数で、
2
+
3
+ > 関数が呼ばれてeggがreturnされ、scramble()の引数にeggが入ったということでしょうか?
4
+
5
+
6
+
1
- Pythonでは、**関数そのもの**を渡すことが可能です。
7
+ その認識は異なります。Pythonでは、**関数そのもの**を渡すことが可能です。
2
8
 
3
9
  ```Python
4
10
 
@@ -50,14 +56,22 @@
50
56
 
51
57
 
52
58
 
59
+ print(type(func)) # <class 'function'>
60
+
61
+ print(type(text)) # <class 'str'>
62
+
63
+
64
+
53
65
  func() # 関数は呼び出せる
54
66
 
55
67
  # text() # 関数じゃないから呼び出せない
56
68
 
69
+ ```
57
70
 
58
71
 
59
- print(type(func)) # <class 'function'>
60
72
 
61
- print(type(text)) # <class 'str'>
73
+ ---
62
74
 
63
- ```
75
+ これ以降、デコレータとは何ぞや、クロージャとは何ぞや、という理解が必要ですが、
76
+
77
+ そちらに関しましてはYouheiSakuraiさんの非常に丁寧かつ明確な回答をご覧ください。

1

追記

2017/12/06 17:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -29,3 +29,35 @@
29
29
 
30
30
 
31
31
  関数の実行結果が渡されるわけではありません。
32
+
33
+
34
+
35
+ ---
36
+
37
+ 上記の例に加えて、こちらの例も示したいと思います。
38
+
39
+ ```Python
40
+
41
+ def fuga():
42
+
43
+ return 'fuga'
44
+
45
+
46
+
47
+ func = fuga # 関数を代入
48
+
49
+ text = fuga() # 関数の実行結果を代入
50
+
51
+
52
+
53
+ func() # 関数は呼び出せる
54
+
55
+ # text() # 関数じゃないから呼び出せない
56
+
57
+
58
+
59
+ print(type(func)) # <class 'function'>
60
+
61
+ print(type(text)) # <class 'str'>
62
+
63
+ ```