質問編集履歴
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -44,4 +44,41 @@
|
|
44
44
|
```python
|
45
45
|
a('スマッシュ')
|
46
46
|
```
|
47
|
-
で実行できないことについて、決まった引数でしか実行できないのでしょうか?
|
47
|
+
で実行できないことについて、決まった引数でしか実行できないのでしょうか?
|
48
|
+
|
49
|
+
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|
50
|
+
今回の私の質問について私の解釈を記します。
|
51
|
+
```python
|
52
|
+
def add_sound(stroke):
|
53
|
+
def inner():
|
54
|
+
return stroke + '-->パコーン'
|
55
|
+
return inner
|
56
|
+
a = add_sound('バックハンドストローク')
|
57
|
+
```
|
58
|
+
について、a はこのコードの4行目return innerからinnerという関数を得ているから
|
59
|
+
```python
|
60
|
+
type(a)
|
61
|
+
>>>class 'function'
|
62
|
+
```
|
63
|
+
と帰ってきている。
|
64
|
+
もう一つ、同じテキストで次のようなコードが載っていたので、試してみました。
|
65
|
+
```python
|
66
|
+
def add_sound2(attack):
|
67
|
+
for i in range(5):
|
68
|
+
print(attack,'--> パッコーン')
|
69
|
+
return attack
|
70
|
+
|
71
|
+
b = add_sound2('スマッシュ')
|
72
|
+
|
73
|
+
type(b)
|
74
|
+
>>>class 'str'
|
75
|
+
|
76
|
+
b
|
77
|
+
>>>'スマッシュ'
|
78
|
+
b()
|
79
|
+
>>>TypeError: 'str' object is not callable
|
80
|
+
```
|
81
|
+
bという変数では引数が'スマッシュ’であるadd_sound2()という関数に結びついていて、return attackよりattackが戻り値として帰ってきている。attackという変数についてadd_sound2を実行する際に'スマッシュ'というstrが入れられているため、bを参照すると'スマッシュ'が表示された。
|
82
|
+
今回テーマのクロージャではinnerという関数を返していることで同じ処理をa()という形で何度も処理できるということですね
|
83
|
+
|
84
|
+
ほんとに何度も追記質問を繰り返してすみませんでした。非常に理解が深まりました!!
|
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,4 +32,16 @@
|
|
32
32
|
a
|
33
33
|
```
|
34
34
|
で実行できました。
|
35
|
-
使用用途の違いについてや、クロージャーでのa()の()の意味について教えてください。
|
35
|
+
使用用途の違いについてや、クロージャーでのa()の()の意味について教えてください。
|
36
|
+
|
37
|
+
**追記**
|
38
|
+
a()のかっこについて、__call__を呼び出しているに過ぎないということがわかりました
|
39
|
+
>[引用元](https://www.nooozui.com/entry/20191108/1573147328)
|
40
|
+
object.__call__(self[, args...])
|
41
|
+
インスタンスが関数として "呼ばれた" 際に呼び出されます; このメソッドが定義されている場合、 x(arg1, arg2, ...) は x.__call__(arg1, arg2, ...) を短く書いたものになります。
|
42
|
+
>[pythonサイト](https://docs.python.org/ja/3/reference/datamodel.html)
|
43
|
+
少し難しいのですが
|
44
|
+
```python
|
45
|
+
a('スマッシュ')
|
46
|
+
```
|
47
|
+
で実行できないことについて、決まった引数でしか実行できないのでしょうか?
|