teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

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

2017/12/08 10:41

投稿

LouiS0616
LouiS0616

スコア35678

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

追記

2017/12/08 10:41

投稿

LouiS0616
LouiS0616

スコア35678

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

追記

2017/12/06 17:49

投稿

LouiS0616
LouiS0616

スコア35678

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
+ ```