您好,登錄后才能下訂單哦!
Python 官網靜悄悄地發布了一則大消息:正式發布 Python 3.8.0!新版本較3.7版增加了一大波新功能和優化,來與 AI 大咖一起參與討論吧~
近期, Python 官網宣布,正式發布 Python 3.8.0!
Python 3.8.0 現已推出。
代表 Python 開發社區和 Python 3.8 發布團隊,我們很高興地宣布 Python 3.8.0 現在已經可以使用。
Python 3.8.0 是 Python 語言的最新正式版,包含許多新功能和優化。
Python 的大多數第三方庫也應該很快就會支持 3.8.0 軟件包。
有關 3.8 版本功能的更多信息,請參閱 “Python 3.8 新特性” 文檔。所有更改的詳細信息都可以在更改日志中找到。
從 2019 年 12 月開始,3.8 系列的維護版本將定期每兩個月發布一次。
我們希望您喜歡 Python 3.8!
感謝所有幫助 Python 開發和這些發布的志愿者!歡迎通過志愿或組織捐贈支持 Python 軟件基金會的工作。
Python 3.8.0 重要新特性&優化
那么,這次新發布的 Python 3.8.0 有哪些重要的改進呢?以下是是 Python 3.8 相比 3.7 的新增特性。
接下來,我們重點來看幾個(來自Python 3.8 文檔)。
賦值表達式
Python 3.8.0 有一個新的語法 :=,它將值賦給一個更大的表達式中的變量。它被親切地稱為 “海象運算符”(walrus operator),因為它長得像海象的眼睛和象牙。
這個 “海象運算符” 在某些時候可以讓你的代碼更整潔,比如:
在這個示例中,賦值表達式可以避免調用 len () 兩次:
if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")
類似的益處還可出現在正則表達式匹配中需要使用兩次匹配對象的情況中,一次檢測用于匹配是否發生,另一次用于提取子分組:
discount = 0.0 if (mo := re.search(r'(\d+)% discount', advertisement)): discount = float(mo.group(1)) / 100.0
此運算符也適用于配合 while 循環計算一個值來檢測循環是否終止,而同一個值又在循環體中再次被使用的情況:
# Loop over fixed length blocks while (block := f.read(256)) != '': process(block)
另一個值得介紹的用例出現于列表推導式中,在篩選條件中計算一個值,而同一個值又在表達式中需要被使用:
[clean_name.title() for name in names if (clean_name := normalize('NFC', name)) in allowed_names]
請盡量將海象運算符的使用限制在清晰的場合中,以降低復雜性并提升可讀性。
僅限位置形參
新增了一個函數形參語法 / 用來指明某些函數形參必須使用僅限位置而非關鍵字參數的形式。這種標記語法與通過 help () 所顯示的使用 Larry Hastings 的 Argument Clinic 工具標記的 C 函數相同。
在下面的例子中,形參 a 和 b 為僅限位置形參,c 或 d 可以是位置形參或關鍵字形參,而 e 或 f 要求為關鍵字形參:
def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f)
以下均為合法的調用:
f(10, 20, 30, d=40, e=50, f=60)
但是,以下均為不合法的調用:
f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
這種標記形式的一個用例是它允許純 Python 函數完整模擬現有的用 C 代碼編寫的函數的行為。例如,內置的 pow () 函數不接受關鍵字參數:
def pow(x, y, z=None, /): "Emulate the built in pow() function" r = x ** y return r if z is None else r%z
另一個用例是在不需要形參名稱時排除關鍵字參數。例如,內置的 len () 函數的簽名為 len (obj, /)。這可以排除如下這種笨拙的調用形式:
len(obj='hello') # The "obj" keyword argument impairs readability
另一個益處是將形參標記為僅限位置形參將允許在未來修改形參名而不會破壞客戶的代碼。例如,在 statistics 模塊中,形參名 dist 在未來可能被修改。這使得以下函數描述成為可能:
def quantiles(dist, /, *, n=4, method='exclusive') ...
由于在 / 左側的形參不會被公開為可用關鍵字,其他形參名仍可在 **kwargs 中使用:
>>> def f(a, b, /, **kwargs): ... print(a, b, kwargs) ... >>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways 10 20 {'a': 1, 'b': 2, 'c': 3}
這極大地簡化了需要接受任意關鍵字參數的函數和方法的實現。例如,下面是 collections 模塊中的代碼摘錄:
class Counter(dict): def __init__(self, iterable=None, /, **kwds): # Note "iterable" is a possible keyword argument
用于已編譯字節碼文件的并行文件系統緩存
新增的 PYTHONPYCACHEPREFIX 設置 (也可使用 -X pycache_prefix) 可將隱式的字節碼緩存配置為使用單獨的并行文件系統樹,而不是默認的每個源代碼目錄下的 __pycache__ 子目錄。
緩存的位置會在 sys.pycache_prefix 中報告 (None 表示默認位置即 __pycache__ 子目錄)。
調試構建使用與發布構建相同的 ABI
發布構建和調試構建現在都是 ABI 兼容的:定義 Py_DEBUG 宏不會再啟用 Py_TRACE_REFS宏,它引入了唯一的 ABI 不兼容性。Py_TRACE_REFS 宏添加了 sys.getobjects () 函數和 PYTHONDUMPREFS 環境變量,它可以使用新的 ./configure --with-trace-refs 構建選項來設置。(由 Victor Stinner 在 bpo-36465 中貢獻。)
f - 字符串支持 = 用于自動記錄表達式和調試文檔
增加 = 說明符用于 f-string。形式為 f'{expr=}' 的 f - 字符串將擴展表示為表達式文本,加一個等于號,再加表達式的求值結果。例如:
>>> user = 'eric_idle' >>> member_since = date(1975, 7, 31) >>> f'{user=} {member_since=}' "user='eric_idle' member_since=datetime.date(1975, 7, 31)"
通常的 f - 字符串格式說明符 允許更細致地控制所要顯示的表達式結果:
>>> delta = date.today() - member_since >>> f'{user=!s} {delta.days=:,d}' 'user=eric_idle delta.days=16,075'
= 說明符將輸出整個表達式,以便詳細演示計算過程:
>>> print(f'{theta=} {cos(radians(theta))=:.3f}') theta=30 cos(radians(theta))=0.866
PEP 587: Python 初始化配置
PEP 587 增加了一個新的 C API 用來配置 Python 初始化,提供對整個配置過程的更細致控制以及更好的錯誤報告。
Vectorcall: 用于 CPython 的快速調用協議
添加 "vectorcall" 協議到 Python/C API。它的目標是對已被應用于許多類的現有優化進行正式化。任何實現可調用對象的擴展類型均可使用此協議。
此特性目前為暫定狀態,計劃在 Python 3.9 將其完全公開。
具有外部數據緩沖區的 pickle 協議 5
當使用 pickle 在 Python 進程間傳輸大量數據以充分發揮多核或多機處理的優勢時,非常重要一點是通過減少內存拷貝來優化傳輸效率,并可能應用一些定制技巧例如針對特定數據的壓縮。
pickle 協議 5 引入了對于外部緩沖區的支持,這樣 PEP 3118 兼容的數據可以與主 pickle 流分開進行傳輸,這是由通信層來確定的。
連續三年奪冠,Python為什么這么受歡迎?
Python 已經成為最受歡迎的編程語言。
在2019年度 IEEE Spectrum 編程語言排行榜中,Python 不負眾望,穩居榜首,而且連續三年奪冠。IEEE Spectrum 2019 十大編程語言排行如下
Python 的流行在很大程度上是受了大量可用專用庫的驅動,特別是在人工智能領域中。事實上,Keras 庫對深度學習開發人員影響很大。但深度學習并不是 Python 產生巨大的影響的唯一領域,微處理器計算能力的顯著提高意味著嵌入式版本的 Python:如 CircuitPython 和 MicroPython,正越來越受制造商的歡迎。
而 Python 為何能連續三年奪冠?
Python 的高速發展主要原因是軟件工程的蓬勃發展,它吸引了許多零基礎的初學者。Java 的編程方法對于初學者來說太冗長了,單單想要完全理解和運行在 Java 中的 “hello world” 這樣的簡單程序,你就需要去了解類、靜態方法和包。在 C 語言中,這要簡單一些,但是在內存管理上還是會出現一些問題。但在 Python 這里,就只是一行代碼的事。所以,Python 越來越流行,被越來越多的開發者使用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。