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

回答編集履歴

2

追記しました。

2023/02/24 14:51

投稿

TakaiY
TakaiY

スコア14574

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

追記

2023/02/24 02:13

投稿

TakaiY
TakaiY

スコア14574

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
+