您好,登錄后才能下訂單哦!
怎樣分析Python3.8中的僅位置參數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
Python3.8新特性的僅位置參數(shù)(Positional-Only Arguments)
函數(shù)傳遞參數(shù)的方式繁多,有位置參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)、命名關(guān)鍵字參數(shù)。舉個(gè)例子:
def add(x, y, *args, **kwargs):
print(f"x={x}, y={y}")
這里的 x 和 y 就是兩個(gè)位置參數(shù),我們可以這樣調(diào)用
>>> add(1, 2)
x=1, y=2
因?yàn)槭俏恢脜?shù),嚴(yán)格遵守位置順序。
不過(guò),你也可以把 x 和 y 當(dāng)做命名關(guān)鍵字參數(shù)進(jìn)行傳遞,參數(shù)的順序可改變,例如把 y 放前面,不影響結(jié)果
>>> add(y=2, x=1)
x=1, y=2
第二種方式看似更靈活,出錯(cuò)的風(fēng)險(xiǎn)也增加了,特別是多人合作的項(xiàng)目中。
那么如何從語(yǔ)法層面上禁止這樣調(diào)用,避免出錯(cuò)呢?
這里就可以使用Python3.8中的僅位置參數(shù)語(yǔ)法了,在函數(shù)定義時(shí),參數(shù)之間可指定一個(gè)斜杠(/),斜杠前的參數(shù)嚴(yán)格遵守僅位置參數(shù)的定義,例如:
>>> def add(x, y, /, *args, **kwargs):
... print(f"x={x}, y={y}")
...
>>> add(1,2)
x=1, y=2
“/“ 告訴解釋器,x 和 y 是兩個(gè)嚴(yán)格的位置參數(shù),不能當(dāng)做命名關(guān)鍵字參數(shù)進(jìn)行傳遞。如果把它當(dāng)作命名關(guān)鍵字參數(shù)進(jìn)行傳遞參數(shù)時(shí),會(huì)怎么樣呢?
>>> add(y=2, x=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() missing 2 required positional arguments: 'x' and 'y'
報(bào)錯(cuò)了,系統(tǒng)不允許你使用這種方式調(diào)用,僅支持位置參數(shù)的方式進(jìn)行調(diào)用,調(diào)用時(shí)不能指定參數(shù)的名字。
其實(shí),這個(gè)語(yǔ)法在Python3.7 就有出現(xiàn)過(guò),比如內(nèi)置函數(shù) float
python3.6可以指定參數(shù)名字進(jìn)行調(diào)用
>>> float(x=1)
1.0
python3.7就會(huì)報(bào)錯(cuò)
>>> float(x=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: float() takes no keyword arguments
>>> float(1)
1.0
可以看下python3.7 下 float 的幫助文檔
>>> help(float)
Help on class float in module builtins:
class float(object)
| float(x=0, /)
|
| Convert a string or number to a floating point number, if possible.
|
| Methods defined here:
|
| __abs__(self, /)
| abs(self)
你會(huì)發(fā)現(xiàn)float定義中,也有個(gè) “/“,說(shuō)明 x 是位置參數(shù),調(diào)用時(shí),不能指定名字。
僅位置參數(shù)的語(yǔ)法就是在函數(shù)定義時(shí),位置參數(shù)用 “/” 進(jìn)行分隔,調(diào)用時(shí)不允許使用命名關(guān)鍵字參數(shù)進(jìn)行調(diào)用,你明白了嗎?
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。