random.randint() での * の使用に混乱しており、ドキュメントが見つかりませんでした
random.randint( *(1,300) )
対
random.randint( 1,300 )
random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
random.randint() での * の使用に混乱しており、ドキュメントが見つかりませんでした
random.randint( *(1,300) )
対
random.randint( 1,300 )
random.randint( *300 )
TypeError: randint() argument after * must be a sequence, not int
この*
コンテキストの は、タプルを個別の要素に展開します。一方
random.randint( (1,300) )
への単一の引数としてタプルを誤って渡しますrandom.randint
。
random.randint( *(1,300) )
「装飾された」タプルの各要素を引数として関数に渡します。ハードコーディングされたタプルではあまり役に立ちません。なぜなら、*
と かっこを削除する方が速くて明確だからです。ただし、タプルを参照する名前がある場合は、より理にかなっています。
range = (1,300)
random_value = random.randint( *range )
は*
、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)
Python の関数で * を使用すると、* に続くシーケンスが関数に渡す引数リストになることを意味します。そう、
random.randint(*(1, 300))
それと同じです
random.randint(1, 300)
コード
random.randint(*300)
300 はシーケンスではなく整数であるため、失敗します。