このコードは質問者さんが書いたものではなさそうですね。
まずは質問に答えます。
どうしてそういう解釈になるのでしょうか?
プログラム中の s = sum(nums)
の式でsum関数を使ってnumsの合計を計算しています。 sum関数は、引数にiterableを取ります。
https://docs.python.org/ja/3/library/functions.html?highlight=sum#sum
iterableとなるオブジェクトにはいくつかありますが、よく使うのはリストです。
https://docs.python.org/ja/3/library/stdtypes.html?highlight=list#iterator-types
https://docs.python.org/ja/3/library/stdtypes.html?highlight=list#sequence-types-list-tuple-range
質問のコードではこの中のどれかというと、この関数は引数で与えられた複数の数値の合計もしくは平均を計算するもののようですから、sum関数の引数になるのはその対象となる数値が入ったリストだろうということになります。
■ おまけ
プログラムについて思いついたことを書いてみます。
items = {"nums":3 , "type":4 , "nums":7}
pythonの辞書(dict)は同じキー、ここではnums、のエントリを複数持つことはできません。上のように初期化すると、右のものが上書きする形になり、 itemsの内容は {"type":4 , "nums":7} となります。
def calc(**items):
関数定義で引数に **
を付けると、その引数の辞書のキーの文字列を引数に持つ変数が引数として割り当てられます。
しかし、その値を定義の中で使っていませんので、この**
を削除するか、本体を書きなおす必要があります。
items["type"] == "sum":
itemのチーtype には sum か avg なので、質問のような{"nums":3 , "type":4 , "nums":7} では計算ができません。
可変長引数
タイトルを見ると、可変長引数と書いてありますが、どういう意味で使っていますか?
calc関数にどのように引数を渡したいのですか?
追記その1
また「nums = items["nums"]」について
下の方にある関数の呼び出しを例にとると、calc(type="sum",nums=(1,2,3,4) ⇒ 10(返り値)
私は最初、"nums"というキーの要素をnumsに格納だと思ったのですが、calcの呼び出し例をみると、第二引数でnums=(1,2,3,4)、つまりキーがnumsで値がタプル(1,2,3,4)の場合だと、先ほどの「nums = items["nums"]」に当てはめて考えると、「辞書items」の「キーnums」の「値(1,2,3,4)」をnumsに格納するという意味でよろしいでしょうか?
はい。
だとすると、nums = items["nums"]ではくnums = items[nums]にならないのはなぜなのでしょうか?
items[nums] としたときの、nums は文字列ではなく変数名だからです。 その時点で変数numsにどのような値が入っているかによって、結果がかわります。 「"nums"」 は numsという文字列を表わします。
辞書を作る時も同様です。 「{"type":"sum", "nums":(1,2,3,4)} 」 と「 {type:"sum", nums:(1,2,3,4)}」は通常違う辞書です。 後者は type, numsは変数です。
関数定義のときの仮引数 type や nums と、 辞書のキー "type" や "nusms" を 混同しているのではないかと思います。 仮引数は変数名なので、""は無し、 辞書のキーには変数名は使えないので、この場合のように文字列を使うことが多いですね。
関数への引数に辞書を使うと、辞書のキー文字列と同じ名前の仮引数に値を設定することができるので、混同しているのでしょう。
※該当のソースコードは、とある講座のソースコードをそのまま貼り付けたもので、その際にcalc関数の呼び出しを行っておりました。以下がその呼び出しです。
calc(type="sum",nums=(1,2,3,4) ⇒ 10(返り値)(type及びnumsの順序に決まりはない)
calc(nums=(1,2,3,4),type="sum") ⇒ 10(返り値)
calc(type="avg",nums=(1,2,3,4)) ⇒2.5(返り値)
なるほど。 この関数は不通に書けば、以下のような書き出しになるはずです。 この関数で上記の呼び出しは正常に動作します。
python
1def calc(type, nums): # 関数定義 の先頭のみ
2calc("sum", (1,2,3,4)) # 呼び出し1
pythonには、引数を辞書で受ける書き方があり、参考にしたサイトはそれを説明するためのものなのでしょう。