您好,登錄后才能下訂單哦!
這篇文章主要講解了“ Python 3.0 新加入了什么特性”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ Python 3.0 新加入了什么特性”吧!
Python 3.0 首次引入了僅限關鍵字參數參數的概念。在這之前,不可能指定一個只通過關鍵字傳遞某些參數的 API。這在有許多參數,其中一些參數可能是可選的函數中很有用。
請看一個特意設計的例子:
def show_arguments(base, extended=None, improved=None, augmented=None): print("base is", base) if extended is not None: print("extended is", extended) if improved is not None: print("improved is", improved) if augmented is not None: print("augmented is", augmented)
當閱讀調用該函數的代碼時,有時很難理解發生了什么:
show_arguments("hello", "extra") base is hello extended is extra show_arguments("hello", None, "extra") base is hello improved is extra
雖然可以用關鍵字參數來調用這個函數,但這明顯不是最好的方法。相反,你可以將這些參數標記為僅限關鍵字:
def show_arguments(base, *, extended=None, improved=None, augmented=None): print("base is", base) if extended is not None: print("extended is", extended) if improved is not None: print("improved is", improved) if augmented is not None: print("augmented is", augmented)
現在,你不能用位置參數傳入額外的參數:
show_arguments("hello", "extra") --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-6000400c4441> in <module> ----> 1 show_arguments("hello", "extra") TypeError: show_arguments() takes 1 positional argument but 2 were given
對該函數的有效調用更容易預測:
show_arguments("hello", improved="extra") base is hello improved is extra
有時,函數式編程的人根據編寫累加器的難易程度來判斷一種語言。累加器是一個函數,當它被調用時,返回目前為止發給它的所有參數的總和。
在 3.0 之前,Python 的標準答案是:
class _Accumulator: def __init__(self): self._so_far = 0 def __call__(self, arg): self._so_far += arg return self._so_far def make_accumulator(): return _Accumulator()
雖然我承認有些啰嗦,但這確實有效:
acc = make_accumulator()print("1", acc(1))print("5", acc(5))print("3", acc(3))
這樣做的輸出結果將是:
1 15 63 9
在 Python 3.x 中,nonlocal
關鍵字可以用少得多的代碼實現同樣的行為。
def make_accumulator(): so_far = 0 def accumulate(arg): nonlocal so_far so_far += arg return so_far return accumulate
雖然累加器是人為的例子,但使用 nonlocal
關鍵字使內部函數擁有具有狀態的的能力是一個強大的工具。
想象一下,你有一個 CSV 文件,每一行由幾個元素組成:
第一個元素是年份
第二個元素是月
其他元素是該月發表的全部文章數,每天一個條目
請注意,最后一個元素是 文章總數,而不是 每天發表的文章。例如,一行的開頭可以是:
2021,1,5,8,10
這意味著在 2021 年 1 月,第一天發表了 5 篇文章。第二天,又發表了三篇文章,使總數達到 8 篇。第三天,又發表了兩篇文章。
一個月可以有 28 天、30 天或 31 天。提取月份、日期和文章總數有多難?
在 3.0 之前的 Python 版本中,你可能會這樣寫:
year, month, total = row[0], row[1], row[-1]
這是正確的,但它掩蓋了格式。使用擴展析構,同樣可以這樣表達:
year, month, *rest, total = row
這意味著如果該格式改為前綴了一個描述,你可以把代碼改成:
_, year, month, *rest, total = row
而不需要在每個索引中添加 1
。
感謝各位的閱讀,以上就是“ Python 3.0 新加入了什么特性”的內容了,經過本文的學習后,相信大家對 Python 3.0 新加入了什么特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。