溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 3.0 新加入了什么特性

發(fā)布時間:2021-06-18 16:53:25 來源:億速云 閱讀:137 作者:chen 欄目:編程語言

這篇文章主要講解了“ Python 3.0 新加入了什么特性”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ Python 3.0 新加入了什么特性”吧!


僅限關鍵字參數(shù)

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

nonlocal

有時,函數(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 新加入了什么特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI