糟了!Python3.7.0 來了
來自專欄計算機視覺論文速遞47 人贊了文章
導言
美國時間6月27日晚8點,Python 3.7.0 經過多輪測試,終於發布了正式版,增強了多處特性功能,同時 3.6 也更新到 3.6.6 穩定版本。
來源:CVer微信公眾號
編輯: Amusi 校稿: Amusi時間: 2018-07-08
前戲
打開Python官網,翻到 Lastet News,引入眼帘的就是 Python 3.7.0 is now available (and so is 3.6.6)! On behalf of ...
link: https://www.python.org/
讓我們看一下官方是怎麼介紹這一爆炸性事件的...
Wednesday, June 27, 2018
Python 3.7.0 is now available (and so is 3.6.6)!On behalf of the Python development community and the Python 3.7 release team, we are pleased to announce the availability of Python 3.7.0. Python 3.7.0 is the newest feature release of the Python language, and it contains many new features and optimizations. You can find Python 3.7.0 here: https://www.python.org/downloads/release/python-370/Most third-party distributors of Python should be making 3.7.0 packages available soon.See the What』s New In Python 3.7 document for more information about features included in the 3.7 series. Detailed information about the changes made in 3.7.0 can be found in its change log. Maintenance releases for the 3.7 series will follow at regular intervals starting in July of 2018.
We hope you enjoy Python 3.7!P.S. We are also happy to announce the availability of Python 3.6.6, the next maintenance release of Python 3.6: https://www.python.org/downloads/release/python-366/Thanks to all of the many volunteers who help make Python Development and these releases possible! Please consider supporting our efforts by volunteering yourself or through organization contributions to the Python Software Foundation.
簡單來說就是,Python3.7.0正式發布,大家可以下載使用,其官方文檔也已經發布,其中Python3.7.0版本加入了很多新功能和優化。與此同時,官方也發布了Python3.6.6。
Python3.7.0
那麼Python3.7.0到底加入了哪些特性,讓它如此與眾不同呢?來繼續往下看
主要特性
- PEP 539,新增 CPython 中用於線程本地存儲的 C-API
- PEP 545,Python 官方文檔翻譯版本,新增日文、法文、韓文
- PEP 552,優化 pyc 文件
- PEP 553,新增內置函數
breakpoint()
,該函數在調用時自動進入調試器 - PEP 557,新增內置模塊
dataclasses
,可大幅簡化類實例屬性的初始化定義 - PEP 560,新增支持類型模塊和泛型
- PEP 562,支持在模塊定義
__getattr__
和__dir__
- PEP 563,推遲對注釋語句的分析從而優化 Python 的類型提示
- PEP 564,
time
內置函數支持納秒 - PEP 565,重新在 __main__ 中默認顯示 DeprecationWarning
- PEP 567,新增
contextvars
模塊,可實現上下文變數解決變數線程安全 - 避免使用 ASCII 作為默認文本編碼,強制 UTF-8 編碼運行
- 字典對象的 keys 按插入順序排列,現在是官方語言規範
- 多方面的顯著性能優化
說這麼多特性,不如舉個例子吧!
這裡搬運知乎大佬「口可口可」的介紹(如有侵權,立即刪除)
dataclasses
模塊 示例
這個特性可能是 3.7.0 以後比較常用的了,是從其他語言借鑒過來的,這裡簡單演示下用法。
假如我們要封裝一個類對象,在之前我們的代碼可能要這麼寫:
1class Article(object): 2 def __init__(self, _id, author_id, title, text, tags=None, 3 created=datetime.now(), edited=datetime.now()): 4 self._id = _id 5 self.author_id = author_id 6 self.title = title 7 self.text = text 8 self.tags = list() if tags is None else tags 9 self.created = created10 self.edited = edited1112 if type(self.created) is str:13 self.created = dateutil.parser.parse(self.created)1415 if type(self.edited) is str:16 self.edited = dateutil.parser.parse(self.edited)1718 def __eq__(self, other):19 if not isinstance(other, self.__class__):20 return NotImplemented21 return (self._id, self.author_id) == (other._id, other.author_id)2223 def __lt__(self, other):24 if not isinstance(other, self.__class__):25 return NotImplemented26 return (self._id, self.author_id) < (other._id, other.author_id)2728 def __repr__(self):29 return {}(id={}, author_id={}, title={}).format(30 self.__class__.__name__, self._id, self.author_id, self.title)
大量的初始化屬性要定義默認值,可能還需要重寫一堆魔法方法,來實現類實例之間的排序 去重 等功能。
如果使用dataclass
進行改造,可以寫成這個樣子:
1@dataclass(order=True) 2class Article(object): 3 _id: int 4 author_id: int 5 title: str = field(compare=False) 6 text: str = field(repr=False, compare=False) 7 tags: List[str] = field(default=list(), repr=False, compare=False) 8 created: datetime = field(default=datetime.now(), repr=False, compare=False) 9 edited: datetime = field(default=datetime.now(), repr=False, compare=False)1011 def __post_init__(self):12 if type(self.created) is str:13 self.created = dateutil.parser.parse(self.created)1415 if type(self.edited) is str:16 self.edited = dateutil.parser.parse(self.edited)
可見這種語法使代碼更加簡練清晰,也更符合面向對象思想的語法方式,用過 SQLAlchemy 的同學肯定覺得很像 ORM 寫法。
上述示例只是最基礎的展示,更豐富的用法可以查看PEP 557文檔。
Python3.7.0 下載和在線文檔
Python3.7.0下載
打開下載地址,哇!已經支持MacOS和Windows,估計Linux也快了!
不過Amusi更好奇Anaconda有沒有推出集成Python3.7.0的軟體包
https://www.python.org/downloads/release/python-370/
Python3.7.0 在線文檔
打開Python3.7.0 在線文檔,新特性介紹、教程和安裝模塊等一網打盡,Python的社區維護真的相當好
https://docs.python.org/3/
Amusi 作為還在使用Python2.7和Python3.5的程序猿,其實感到很開森,新版本無疑更強大更優化,大家也快更新代碼~適應新環境
【推薦文章】
[1] GitHub:目標檢測最全論文集錦
[2] 重磅 | 吳恩達的機器學習書籍又雙叒更新啦!
[3] 重磅:TensorFlow實現YOLOv3(內含福利)
[4] 重磅 | TensorFlow學習資料最全集錦
[5] 人工智慧 | 中國計算機學會推薦國際學術刊物/會議
[6] 計算機視覺 | 中國計算機學會推薦國際學術刊物/會議
[7] 深度學習的卷積演算法指南[1] 卷積和池化簡介
[8] 深度學習的卷積演算法指南[2] 卷積詳解
若喜歡Amusi推送的文章,請掃描下方二維碼關注CVer公眾號!
http://weixin.qq.com/r/NioZAUbEpRvarQJi938k (二維碼自動識別)
推薦閱讀: