回答編集履歴
2
追記しました。
answer
CHANGED
@@ -28,3 +28,33 @@
|
|
28
28
|
タイトルを見ると、可変長引数と書いてありますが、どういう意味で使っていますか?
|
29
29
|
calc関数にどのように引数を渡したいのですか?
|
30
30
|
|
31
|
+
---
|
32
|
+
追記その1
|
33
|
+
|
34
|
+
>また「nums = items["nums"]」について
|
35
|
+
>下の方にある関数の呼び出しを例にとると、calc(type="sum",nums=(1,2,3,4) ⇒ 10(返り値)
|
36
|
+
> 私は最初、"nums"というキーの要素をnumsに格納だと思ったのですが、calcの呼び出し例をみると、第二引数でnums=(1,2,3,4)、つまりキーがnumsで値がタプル(1,2,3,4)の場合だと、先ほどの「nums = items["nums"]」に当てはめて考えると、「辞書items」の「キーnums」の「値(1,2,3,4)」をnumsに格納するという意味でよろしいでしょうか?
|
37
|
+
|
38
|
+
はい。
|
39
|
+
|
40
|
+
> だとすると、nums = items["nums"]ではくnums = items[nums]にならないのはなぜなのでしょうか?
|
41
|
+
|
42
|
+
items[nums] としたときの、nums は文字列ではなく変数名だからです。 その時点で変数numsにどのような値が入っているかによって、結果がかわります。 「"nums"」 は numsという文字列を表わします。
|
43
|
+
辞書を作る時も同様です。 「{"type":"sum", "nums":(1,2,3,4)} 」 と「 {type:"sum", nums:(1,2,3,4)}」は通常違う辞書です。 後者は type, numsは変数です。
|
44
|
+
|
45
|
+
関数定義のときの仮引数 type や nums と、 辞書のキー "type" や "nusms" を 混同しているのではないかと思います。 仮引数は変数名なので、""は無し、 辞書のキーには変数名は使えないので、この場合のように文字列を使うことが多いですね。
|
46
|
+
関数への引数に辞書を使うと、辞書のキー文字列と同じ名前の仮引数に値を設定することができるので、混同しているのでしょう。
|
47
|
+
|
48
|
+
> ※該当のソースコードは、とある講座のソースコードをそのまま貼り付けたもので、その際にcalc関数の呼び出しを行っておりました。以下がその呼び出しです。
|
49
|
+
> calc(type="sum",nums=(1,2,3,4) ⇒ 10(返り値)(type及びnumsの順序に決まりはない)
|
50
|
+
> calc(nums=(1,2,3,4),type="sum") ⇒ 10(返り値)
|
51
|
+
> calc(type="avg",nums=(1,2,3,4)) ⇒2.5(返り値)
|
52
|
+
|
53
|
+
なるほど。 この関数は不通に書けば、以下のような書き出しになるはずです。 この関数で上記の呼び出しは正常に動作します。
|
54
|
+
```python
|
55
|
+
def calc(type, nums): # 関数定義 の先頭のみ
|
56
|
+
calc("sum", (1,2,3,4)) # 呼び出し1
|
57
|
+
```
|
58
|
+
pythonには、引数を辞書で受ける書き方があり、参考にしたサイトはそれを説明するためのものなのでしょう。
|
59
|
+
|
60
|
+
|
1
追記
answer
CHANGED
@@ -24,3 +24,7 @@
|
|
24
24
|
> items["type"] == "sum":
|
25
25
|
itemのチーtype には sum か avg なので、質問のような{"nums":3 , "type":4 , "nums":7} では計算ができません。
|
26
26
|
|
27
|
+
> 可変長引数
|
28
|
+
タイトルを見ると、可変長引数と書いてありますが、どういう意味で使っていますか?
|
29
|
+
calc関数にどのように引数を渡したいのですか?
|
30
|
+
|