偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

你不會(huì)在 Python 中看到的 4 個(gè)有用的特性

譯文
開發(fā)
Python 有許多偉大的特性,例如便利性、廣泛的強(qiáng)大的庫、有用的用戶社區(qū),但仍然缺少一些特性。這些特性在其他語言中會(huì)使某些工作更容易,可它們并不會(huì)很快出現(xiàn)在 Python 中,至少目前來看是這樣。

以下是目前 Python 中沒有的四種常用語言特性。其中至少有兩個(gè)永遠(yuǎn)不會(huì)有,而其他的最多是幾年后的事。我們將看看是什么阻礙了這些特性的實(shí)現(xiàn),或者說要在未來的Python版本中包含它們需要做些什么。

不會(huì)有的:一個(gè)靜態(tài)類型的編譯版 Python

一些開發(fā)者夢(mèng)想著一個(gè)使用靜態(tài)類型的 Python 來編譯本地機(jī)器代碼。畢竟,靈活的類型是造成 Python 緩慢的根源,而靜態(tài)類型將結(jié)束這種狀況。靜態(tài)類型也為程序員提供了強(qiáng)有力的保證,使他們能夠從他們的代碼中得到想要的結(jié)果。那么,問題出在哪里呢?

雖然 Python 確實(shí)有類型提示,但它們的目的是在編輯時(shí)通過提示工具使語言更適合于靜態(tài)分析。只有第三方項(xiàng)目(比如pydantic)在運(yùn)行時(shí)使用類型提示。Python 運(yùn)行時(shí)本身并不使用類型提示。

在PEP 484中,即Python類型提示的增強(qiáng)建議中,有一個(gè)明確的目標(biāo)是讓類型提示永遠(yuǎn)是可選的。"Python 仍將是一種動(dòng)態(tài)類型化的語言,作者不希望將類型提示變成強(qiáng)制性的,即使按照慣例也是如此。"

真正想要靜態(tài)類型的Python版本的開發(fā)者可以轉(zhuǎn)向Cython或mypyc,但即使是這些項(xiàng)目也是有代價(jià)的。在Cython中,最大的性能提升來自于使用純C類型和結(jié)構(gòu),以及減少對(duì)Python運(yùn)行時(shí)的使用。簡(jiǎn)單地說,在不犧牲Python的動(dòng)態(tài)性的情況下,很難讓它編譯得更快。把不需要?jiǎng)討B(tài)性的部分分離出來,然后提高它們的速度,這要容易得多。

不會(huì)有的:多行l(wèi)ambdas

Python 的 lambda 表達(dá)式,或者說匿名函數(shù),是有限制的。它們只允許一個(gè)表達(dá)式 (本質(zhì)上,在賦值操作中 = 符號(hào)右邊的任何東西) 作為函數(shù)體。從JavaScript這樣的語言來到Python的開發(fā)者,在那里多行匿名函數(shù)是常態(tài),他們經(jīng)常要求在Python中實(shí)現(xiàn)這一功能。

Python 的創(chuàng)造者 Guido van Rossum 很久以前就否定了 lambda 除了是單一表達(dá)式的語法糖之外的任何想法。他的立場(chǎng)在2006年的一封電子郵件中得到了最好的概括,在那里他討論了為什么多行l(wèi)ambdas在Python中沒有也不會(huì)成為一種東西。

多行l(wèi)ambdas幾乎沒有給Python增加任何實(shí)際的能力或表現(xiàn)力,而且會(huì)以使它成為一種可讀性較差的語言為代價(jià)。(可讀性是Python的首要問題)。

目前還沒有提供可用的語法,可以與Python的白色空間敏感設(shè)計(jì)的其他部分優(yōu)雅地整合。

將多行l(wèi)ambda轉(zhuǎn)換成一個(gè)完整的函數(shù)幾乎不費(fèi)吹灰之力,反正van Rossum建議將其作為 "多行l(wèi)ambda "方案的使用情況。

不用說,Python中多行l(wèi)ambdas的前景并不光明。

不太可能有的:一個(gè)沒有 GIL 的 Python

全局解釋器鎖,或稱 GIL,長(zhǎng)期以來一直是 Python 愛好者的眼中釘、肉中刺。GIL 在 Python 運(yùn)行時(shí)中同步活動(dòng),以序列化對(duì)對(duì)象的訪問并管理全局狀態(tài)。GIL 的缺點(diǎn)是,它使 Python 運(yùn)行時(shí)在實(shí)踐中成為單線程。如果你想要真正的線程并行,你需要啟動(dòng)不連續(xù)的 Python 解釋器副本,并在每個(gè)副本上運(yùn)行獨(dú)立的線程。從理論上講,沒有 GIL 的 Python 可以允許更大的并行性,從而提高性能。那么,為什么它不太可能呢?

已經(jīng)有各種建議要從 Python 中移除 GIL。大多數(shù)建議會(huì)破壞向后的兼容性,或者使Python在單線程操作中變得更慢,或者兩者兼而有之。其中一項(xiàng)努力,即 "GILectomy "項(xiàng)目帶來了嚴(yán)重的性能損失。Python 3.x 對(duì) GIL 進(jìn)行了重做,以提高其基準(zhǔn)性能,但為了保持向后的兼容性,并沒有刪除它。

由于這些問題,GIL 可能只是 Python 用戶生活中的一個(gè)事實(shí)。但是有可能改善它的性能。在Python運(yùn)行時(shí)間中允許更好的并行性的一種方法是在一個(gè)進(jìn)程中運(yùn)行多個(gè)解釋器。要使這個(gè)建議成為現(xiàn)實(shí),需要對(duì)Python的內(nèi)部進(jìn)行重大修改,包括重做Python的部分C API。許多第三方模塊都依賴于C API,因此也需要更新。

一個(gè)較新的提議,PEP 684,擴(kuò)展了多解釋器的概念,讓每個(gè)子解釋器使用自己的GIL。在這種情況下,提議的改變也將允許戰(zhàn)略性地共享需要在子解釋器之間共享的對(duì)象。

或許會(huì)有的:一個(gè)Python原生JIT編譯器

在保持Python語言所特有的靈活性的同時(shí),有一個(gè)行之有效的方法是使用一個(gè)即時(shí)編譯器,或者叫JIT。JIT 編譯包括在運(yùn)行時(shí)分析代碼,而不是提前分析,并根據(jù)它在運(yùn)行時(shí)表現(xiàn)出來的行為有選擇地或完全地編譯成機(jī)器代碼。

Python已經(jīng)存在JIT。PyPy是最常用和發(fā)展最好的例子,它擅長(zhǎng)在不修改程序源代碼的情況下使長(zhǎng)期運(yùn)行的、服務(wù)器式的應(yīng)用程序提供更好的性能。但是Python的參考版本CPython會(huì)不會(huì)從某種JIT中受益呢?

最近在2021年P(guān)ython語言峰會(huì)上討論的使Python更快的倡議,產(chǎn)生了一些類似的建議。目前的建議不是在Python中實(shí)現(xiàn)一個(gè)完整的JIT,而是在解釋器中加入自適應(yīng)行為,以便在常見的特殊情況下加快執(zhí)行速度。未來可能還有其他類型的JIT類型的專業(yè)化的空間,比如為真正的高速代碼路徑生成機(jī)器碼。但近期的計(jì)劃是對(duì)現(xiàn)有的解釋器進(jìn)行擴(kuò)展,而不是取代它。

責(zé)任編輯:黃顯東 來源: infoworld
相關(guān)推薦

2025-04-07 13:17:49

2009-09-12 10:57:34

2022-01-11 19:31:33

GNOME桌面應(yīng)用

2010-10-19 10:44:49

李開復(fù)

2012-06-20 14:38:32

2022-12-07 08:30:10

策略模式設(shè)計(jì)模式

2022-06-23 11:22:12

LinuxLinusLinux 社區(qū)

2010-08-26 10:06:18

微軟Hyper-VVMworld

2009-03-13 19:04:57

Windows 7發(fā)布日期

2018-04-27 15:00:54

2019-10-15 16:02:23

戴爾

2018-07-16 09:36:05

2020-06-28 14:18:51

Android 11功能谷歌

2015-07-17 11:35:22

Windows 10功能

2020-07-20 13:59:17

服務(wù)器項(xiàng)目工程打包

2021-05-29 07:35:13

Python編程語言

2020-09-28 07:56:16

Python3.9Python開發(fā)

2020-06-21 13:57:21

JavaScript開發(fā)代碼

2011-11-03 16:09:36

2022-08-11 12:28:09

For-elsePython
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)