您好,登錄后才能下訂單哦!
這篇文章主要講解了“ Python 3.0 新加入了什么特性”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ Python 3.0 新加入了什么特性”吧!
Python 3.0 首次引入了僅限關鍵字參數(shù)參數(shù)的概念。在這之前,不可能指定一個只通過關鍵字傳遞某些參數(shù)的 API。這在有許多參數(shù),其中一些參數(shù)可能是可選的函數(shù)中很有用。
請看一個特意設計的例子:
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)
當閱讀調(diào)用該函數(shù)的代碼時,有時很難理解發(fā)生了什么:
show_arguments("hello", "extra") base is hello extended is extra show_arguments("hello", None, "extra") base is hello improved is extra
雖然可以用關鍵字參數(shù)來調(diào)用這個函數(shù),但這明顯不是最好的方法。相反,你可以將這些參數(shù)標記為僅限關鍵字:
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)
現(xiàn)在,你不能用位置參數(shù)傳入額外的參數(shù):
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
對該函數(shù)的有效調(diào)用更容易預測:
show_arguments("hello", improved="extra") base is hello improved is extra
有時,函數(shù)式編程的人根據(jù)編寫累加器的難易程度來判斷一種語言。累加器是一個函數(shù),當它被調(diào)用時,返回目前為止發(fā)給它的所有參數(shù)的總和。
在 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
關鍵字可以用少得多的代碼實現(xiàn)同樣的行為。
def make_accumulator(): so_far = 0 def accumulate(arg): nonlocal so_far so_far += arg return so_far return accumulate
雖然累加器是人為的例子,但使用 nonlocal
關鍵字使內(nèi)部函數(shù)擁有具有狀態(tài)的的能力是一個強大的工具。
想象一下,你有一個 CSV 文件,每一行由幾個元素組成:
第一個元素是年份
第二個元素是月
其他元素是該月發(fā)表的全部文章數(shù),每天一個條目
請注意,最后一個元素是 文章總數(shù),而不是 每天發(fā)表的文章。例如,一行的開頭可以是:
2021,1,5,8,10
這意味著在 2021 年 1 月,第一天發(fā)表了 5 篇文章。第二天,又發(fā)表了三篇文章,使總數(shù)達到 8 篇。第三天,又發(fā)表了兩篇文章。
一個月可以有 28 天、30 天或 31 天。提取月份、日期和文章總數(shù)有多難?
在 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 新加入了什么特性”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對 Python 3.0 新加入了什么特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。