摘要:正文總所周知,和根本就是兩個(gè)東西,每次因?yàn)檫@個(gè)兼容性的問題都會(huì)把自己搞瘋。提供了模塊,把下一個(gè)新版本的特性導(dǎo)入到當(dāng)前版本,于是我們就可以在當(dāng)前版本中測(cè)試一些新版本的特性。傳送門不多,才個(gè)。
寫在前面
我是在學(xué)習(xí)cs231n的assignment3的課程,發(fā)現(xiàn)里面的代碼大量頻繁出現(xiàn)了這個(gè)庫,那我就很奇怪了,為什么有個(gè)future這個(gè)奇怪名字的庫會(huì)出現(xiàn)呢?到底這個(gè)庫又有什么用?下面就讓我為你揭開。
正文總所周知,python3.x和python2.x根本就是兩個(gè)東西,每次因?yàn)檫@個(gè)兼容性的問題都會(huì)把自己搞瘋。
下面很多內(nèi)容參考廖雪峰博客
從Python 2.7到Python 3.x就有不兼容的一些改動(dòng),比如2.x里的字符串用"xxx"表示str,Unicode字符串用u"xxx"表示unicode,而在3.x中,所有字符串都被視為unicode,因此,寫u"xxx"和"xxx"是完全一致的,而在2.x中以"xxx"表示的str就必須寫成b"xxx",以此表示“二進(jìn)制字符串”。
于是呢。
Python提供了__future__模塊,把下一個(gè)新版本的特性導(dǎo)入到當(dāng)前版本,于是我們就可以在當(dāng)前版本中測(cè)試一些新版本的特性。舉例說明如下:
為了適應(yīng)Python 3.x的新的字符串的表示方法,在2.7版本的代碼中,可以通過unicode_literals來使用Python 3.x的新的語法:
# still running on Python 2.7 from __future__ import unicode_literals print ""xxx" is unicode?", isinstance("xxx", unicode) print "u"xxx" is unicode?", isinstance(u"xxx", unicode) print ""xxx" is str?", isinstance("xxx", str) print "b"xxx" is str?", isinstance(b"xxx", str) 輸出結(jié)果: "xxx" is unicode? True u"xxx" is unicode? True "xxx" is str? False b"xxx" is str? True
類似的情況還有除法運(yùn)算。在Python 2.x中,對(duì)于除法有兩種情況,如果是整數(shù)相除,結(jié)果仍是整數(shù),余數(shù)會(huì)被扔掉,這種除法叫“floor deviation”:
>>> 10 / 3 3
要做精確除法,必須把其中一個(gè)數(shù)變成浮點(diǎn)數(shù):
>>> 10.0 / 3 3.3333333333333335
而在Python 3.x中,所有的除法都是精確除法,floor deviation 用//表示:
$ python3 Python 3.3.2 (default, Jan 22 2014, 09:54:40) [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 10 / 3 3.3333333333333335 >>> 10 // 3 3
如果你想在Python 2.7的代碼中直接使用Python 3.x的除法,可以通過__future__模塊的division實(shí)現(xiàn):
from __future__ import division print "10 / 3 =", 10 / 3 print "10.0 / 3 =", 10.0 / 3 print "10 // 3 =", 10 // 3
結(jié)果如下:
10 / 3 = 3.33333333333 10.0 / 3 = 3.33333333333 10 // 3 = 3
所以總結(jié)來說,__future__就好像這個(gè)名字一樣,未來,就是為了讓你在python2.x的情況下使用python3.x的東西,具體還有很多的詳細(xì)使用方式就需要好好看看api了。
api傳送門
feature不多,才7個(gè)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40787.html
摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來說, 基礎(chǔ)大概也就夠用了...
摘要:機(jī)器學(xué)習(xí)由于數(shù)據(jù)量較大,技術(shù)已成為必要。以下腳本演示了世界銀行數(shù)據(jù)的線性回歸實(shí)用程序和緩存下載程序省略了水印和繪圖標(biāo)簽的代碼代碼應(yīng)顯示以下圖像該計(jì)劃下載年世界銀行數(shù)據(jù),并將嬰兒死亡率與人均進(jìn)行對(duì)比。 showImg(https://segmentfault.com/img/remote/1460000019179713); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Sl...
摘要:標(biāo)準(zhǔn)庫中所有阻塞型函數(shù)都會(huì)釋放,允許其他線程運(yùn)行。如果調(diào)用引發(fā)異常,那么當(dāng)從迭代器檢索其值時(shí),將引發(fā)異常。總結(jié)自版就支持線程了,只不過是使用線程的最新方式。類封裝了模塊的組件,使使用線程變得更加方便。下一篇筆記應(yīng)該是使用處理并發(fā)。 作為Python程序員,平時(shí)很少使用并發(fā)編程,偶爾使用也只需要派生出一批獨(dú)立的線程,然后放到隊(duì)列中,批量執(zhí)行。所以,不夸張的說,雖然我知道線程、進(jìn)程、并行、...
摘要:注本文的作者是。原文的地址為該筆記向你展示了編寫不會(huì)過時(shí)的兼容和的代碼風(fēng)格。它是在的演講,?;菊Z法差異為了打印出多個(gè)。方方和工具沒有提供一個(gè)選項(xiàng)自動(dòng)完成這個(gè)。如果你為了個(gè)項(xiàng)目編寫新的代碼庫,你可以用一個(gè)字符模塊標(biāo)記所有的字符字面量。 注:本文的作者是 Ed Schofield。原文的地址為: Cheat Sheet: Writing Python 2-3 compatible ...
閱讀 1203·2021-11-23 10:10
閱讀 1548·2021-09-30 09:47
閱讀 931·2021-09-27 14:02
閱讀 3007·2019-08-30 15:45
閱讀 3045·2019-08-30 14:11
閱讀 3639·2019-08-29 14:05
閱讀 1845·2019-08-29 13:51
閱讀 2236·2019-08-29 11:33