python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数
這是Python3.8新特性的第二篇,第一篇介紹了賦值表達式,這篇文章花幾分鐘了解什么是僅位置參數(Positional-Only Arguments)
插播一條:我自己是一名從事了多年開發的Python老程序員,辭職目前在做自己的Python私人定制課程,今年年初我花了一個月整理了一份最適合2019年學習的Python學習干貨,可以送給每一位喜歡Python的小伙伴,想要獲取的可以加我的企鵝Python交流群,639+584+010,即可免費獲取。群里有很多志同道合的朋友,大家都在一起學習Python,在學習Python中遇到問題,都可以問我。
函數傳遞參數的方式繁多,有位置參數、默認參數、可變參數、關鍵字參數、命名關鍵字參數。舉個例子:
defadd(x, y, *args, **kwargs):
print(f"x={x}, y={y}")
這里的 x 和 y 就是兩個位置參數,我們可以這樣調用
>>> add(1,2)
x=1, y=2
因為是位置參數,嚴格遵守位置順序。
不過,你也可以把 x 和 y 當做命名關鍵字參數進行傳遞,參數的順序可改變,例如把 y 放前面,不影響結果
>>> add(y=2, x=1)
x=1, y=2
第二種方式看似更靈活,出錯的風險也增加了,特別是多人合作的項目中。
那么如何從語法層面上禁止這樣調用,避免出錯呢?
這里就可以使用Python3.8中的僅位置參數語法了,在函數定義時,參數之間可指定一個斜杠(/),斜杠前的參數嚴格遵守僅位置參數的定義,例如:
>>> defadd(x, y, /, *args, **kwargs):
... print(f"x={x}, y={y}")
...
>>> add(1,2)
x=1, y=2
“/“ 告訴解釋器,x 和 y 是兩個嚴格的位置參數,不能當做命名關鍵字參數進行傳遞。如果把它當作命名關鍵字參數進行傳遞參數時,會怎么樣呢?
>>> add(y=2, x=1)
Traceback (most recent call last):
File"", line1,in
TypeError: add() missing2required positional arguments:'x'and'y'
報錯了,系統不允許你使用這種方式調用,僅支持位置參數的方式進行調用,調用時不能指定參數的名字。
其實,這個語法在Python3.7 就有出現過,比如內置函數?float
python3.6可以指定參數名字進行調用
>>> float(x=1)
1.0
python3.7就會報錯
>>> float(x=1)
Traceback (most recent call last):
File"", line1,in
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)
你會發現float定義中,也有個 “/“,說明 x 是位置參數,調用時,不能指定名字。
總結
僅位置參數的語法就是在函數定義時,位置參數用 “/” 進行分隔,調用時不允許使用命名關鍵字參數進行調用,你明白了嗎?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python 3.8 新特性 video_1分钟了解:Python3.8 新特性:仅位置参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知名长租公寓企业濒临破产,租户和租客深受
- 下一篇: 信用卡申请了不激活有风险吗 信用卡申请后