第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是Python 3.6中的變量注釋?

什么是Python 3.6中的變量注釋?

繁星點點滴滴 2019-07-26 17:08:29
什么是Python 3.6中的變量注釋?Python 3.6即將發(fā)布。PEP 494 - Python 3.6發(fā)布時間表提到12月底,所以我通過Python 3.6中的新功能看到他們提到了變量注釋:PEP 484引入了函數(shù)參數(shù)類型注釋的標準,即類型提示。此PEP為Python添加語法以注釋變量類型,包括類變量和實例變量:  primes: List[int] = []   captain: str  # Note: no initial value!   class Starship:      stats: Dict[str, int] = {}與函數(shù)注釋一樣,Python解釋器不會將任何特定含義附加到變量注釋,只將它們存儲在__annotations__類或模塊的特殊屬性中。與靜態(tài)類型語言中的變量聲明相比,注釋語法的目標是提供一種通過抽象語法樹和__annotations__屬性為第三方工具和庫指定結構化類型元數(shù)據(jù)的簡便方法。因此,根據(jù)我的閱讀,它們是來自Python 3.5的類型提示的一部分,在Python 3.5中的什么是類型提示中有所描述。我按照captain: str和class Starship示例,但不確定最后一個:如何primes: List[int] = []解釋?它是否定義了一個只允許整數(shù)的空列表?
查看完整描述

2 回答

?
慕斯王

TA貢獻1864條經(jīng)驗 獲得超2個贊

什么是變量注釋?

變量注釋只是注釋的下一步# type,因為它們被定義為PEP 484PEP 526相應部分強調了這一變化背后的基本原理。

所以,而不是暗示類型:

primes = []  # type: List[int]

引入新語法以允許使用表單賦值直接注釋類型:

primes: List[int] = []

正如@Martijn指出的那樣,typing它通過使用可用的類型并將其初始化為空列表來表示整數(shù)列表。

它帶來了什么變化?

引入的第一個更改是新語法,允許您使用類型注釋名稱,可以在:字符后單獨添加,也可以選擇注釋,同時為其指定值:

annotated_assignment_stmt ::=  augtarget ":" expression ["=" expression]

所以有問題的例子:

   primes: List[int] = [ ]#    ^        ^         ^#  augtarget  |         |#         expression    |#                  expression (optionally initialize to empty list)

還引入了其他更改以及新語法; 模塊和類現(xiàn)在具有一個__annotations__屬性(如PEP 3107之后的函數(shù) - 函數(shù)注釋),其中附加了類型元數(shù)據(jù):

from typing import get_type_hints  # grabs __annotations__

現(xiàn)在__main__.__annotations__保存聲明的類型:

>>> from typing import List, get_type_hints>>> primes: List[int] = []>>> captain: str>>> import __main__>>> get_type_hints(__main__){'primes': typing.List<~T>[int]}

captain目前不會顯示,get_type_hints因為get_type_hints只返回模塊上也可以訪問的類型; 即,它首先需要一個值:

>>> captain = "Picard">>> get_type_hints(__main__){'primes': typing.List<~T>[int], 'captain': <class 'str'>}

使用print(__annotations__)會顯示,'captain': <class 'str'>但你真的不應該__annotations__直接訪問。

同樣,對于類:

>>> get_type_hints(Starship)ChainMap({'stats': typing.Dict<~KT, ~VT>[str, int]}, {})

其中a ChainMap用于獲取給定類(位于第一個映射中)的注釋以及在其中找到的基類中定義的所有注釋mro(對應的映射{})。

除了新語法之外,ClassVar還添加了一個新類型來表示類變量。是的,stats在你的例子中實際上是一個實例變量,而不是一個ClassVar。

我會被迫使用它嗎?

與類型提示一樣PEP 484,這些是完全可選的,主要用于類型檢查工具(以及基于此信息可以構建的任何其他工具)。當發(fā)布穩(wěn)定版本的Python 3.6時,它將是臨時的,因此將來可能會添加一些小的調整。


查看完整回答
反對 回復 2019-07-26
  • 2 回答
  • 0 關注
  • 4492 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號