我在random.randint(使用*)的混淆,但沒有找到任何文件使用*運營商在函數調用
random.randint(*(1,300))
VS
random.randint(1,300)
random.randint(*300)
TypeError: randint() argument after * must be a sequence, not int
我在random.randint(使用*)的混淆,但沒有找到任何文件使用*運營商在函數調用
random.randint(*(1,300))
VS
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的一部分function call syntax。 *
需要一個迭代器並將其元素添加到函數調用的參數中。
random.randint(*(1,300))
是一回事
random.randint(1,300)
下面是一個語法錯誤,因爲300
不是一個迭代。
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不是一個序列,它是一個整數。
是文字代碼嗎?如果它是'r = [1,300]; random.randint(* r)'...但是一個文字元組被解開,有點奇怪......我認爲@ecatmur提供的鏈接很可能是您的問題的答案 –
是的,它不是文字代碼。元組參數傳遞給random.randint()。謝謝。 – user138645