1

random.randint() での * の使用に混乱しており、ドキュメントが見つかりませんでした

random.randint( *(1,300) )

random.randint( 1,300 )

random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
4

3 に答える 3

6

この*コンテキストの は、タプルを個別の要素に展開します。一方

random.randint( (1,300) )

への単一の引数としてタプルを誤って渡しますrandom.randint

random.randint( *(1,300) )

「装飾された」タプルの各要素を引数として関数に渡します。ハードコーディングされたタプルではあまり役に立ちません。なぜなら、*と かっこを削除する方が速くて明確だからです。ただし、タプルを参照する名前がある場合は、より理にかなっています。

range = (1,300)
random_value = random.randint( *range )
于 2013-10-22T12:09:17.043 に答える
2

*、Python の関数呼び出し構文の一部です。は*iterable を受け取り、その要素を関数呼び出しのパラメーターに追加します。

random.randint(*(1,300))

と同じことです

random.randint(1,300)

300は iterable ではないため、以下は構文エラーです。

random.randint(*300)

*構文が役立つ場合があります。関数呼び出しで使用する位置パラメータを含むリスト (またはその他のイテラブル)xがある場合は、次のいずれかを指定できます。

func(x[0], x[1], x[2])

または、単に:

func(*x)
于 2013-10-22T12:09:07.607 に答える
1

Python の関数で * を使用すると、* に続くシーケンスが関数に渡す引数リストになることを意味します。そう、

random.randint(*(1, 300))

それと同じです

random.randint(1, 300)

コード

random.randint(*300)

300 はシーケンスではなく整数であるため、失敗します。

于 2013-10-22T12:10:37.740 に答える