目前,Python 科學(xué)棧中的所有主要項(xiàng)目都同時(shí)支持 Python 3.x 和 Python 2.7,不過,這種情況很快即將結(jié)束。去年 11 月,Numpy 團(tuán)隊(duì)的一份聲明引發(fā)了數(shù)據(jù)科學(xué)社區(qū)的關(guān)注: 這一科學(xué)計(jì)算庫即將放棄對(duì)于 Python 2.7 的支持 ,全面轉(zhuǎn)向 Python 3。Numpy 并不是唯一宣稱即將放棄 Python 舊版本支持的工具,pandas 與 Jupyter notebook 等很多產(chǎn)品也在即將放棄支持的名單之中。對(duì)于數(shù)據(jù)科學(xué)開發(fā)者而言,如何將已有項(xiàng)目從 Python 2 轉(zhuǎn)向 Python 3 成為了正在面臨的重大問題。來自莫斯科大學(xué)的 Alex Rogozhnikov 博士為我們整理了一份代碼遷移指南。
Python 3 功能簡介
Python 是機(jī)器學(xué)習(xí)和其他科學(xué)領(lǐng)域中的主流語言,我們通常需要使用它處理大量的數(shù)據(jù)。Python 兼容多種深度學(xué)習(xí)框架,且具備很多優(yōu)秀的工具來執(zhí)行數(shù)據(jù)預(yù)處理和可視化。
但是,Python 2 和 Python 3 長期共存于 Python 生態(tài)系統(tǒng)中,很多數(shù)據(jù)科學(xué)家仍然使用 Python 2。2019 年底,Numpy 等很多科學(xué)計(jì)算工具都將停止支持 Python 2,而 2018 年后 Numpy 的所有新功能版本將只支持 Python 3。
為了使 Python 2 向 Python 3 的轉(zhuǎn)換更加輕松,我收集了一些 Python 3 的功能,希望對(duì)大家有用。
使用 pathlib 更好地處理路徑
pathlib 是 Python 3 的默認(rèn)模塊,幫助避免使用大量的 os.path.joins:
from pathlib import Pathdataset = 'wiki_images'datasets_root = Path('/path/to/datasets/')train_path = datasets_root / dataset / 'train'test_path = datasets_root / dataset / 'test'for image_path in train_path.iterdir(): with image_path.open() as f: # note, open is a method of Path object # do something with an imagePython 2 總是試圖使用字符串級(jí)聯(lián)(準(zhǔn)確,但不好),現(xiàn)在有了 pathlib,代碼安全、準(zhǔn)確、可讀性強(qiáng)。
此外,pathlib.Path 具備大量方法,這樣 Python 新用戶就不用每個(gè)方法都去搜索了:
p.exists()p.is_dir()p.parts()p.with_name('sibling.png') # only change the name, but keep the folderp.with_suffix('.jpg') # only change the extension, but keep the folder and the namep.chmod(mode)p.rmdir()pathlib 會(huì)節(jié)約大量時(shí)間,詳見:
文檔:https://docs.python.org/3/library/pathlib.html;
參考信息:https://pymotw.com/3/pathlib/。
類型提示(Type hinting)成為語言的一部分
PyCharm 中的類型提示示例:
Python 不只是適合腳本的語言,現(xiàn)在的數(shù)據(jù)流程還包括大量步驟,每一步都包括不同的框架(有時(shí)也包括不同的邏輯)。
類型提示被引入 Python,以幫助處理越來越復(fù)雜的項(xiàng)目,使機(jī)器可以更好地進(jìn)行代碼驗(yàn)證。而之前需要不同的模塊使用自定義方式在文檔字符串中指定類型(注意:PyCharm 可以將舊的文檔字符串轉(zhuǎn)換成新的類型提示)。
新聞熱點(diǎn)
疑難解答
圖片精選