2016-09-22 45 views
-1

任何人都可以告訴我下面兩個函數有什麼區別?除了->,它們看起來都很相似。在Python中使用` - >`?

foo1()

def foo1() -> None: 
pass 

foo2的()

def foo2(): 
pass 

當我打電話給他們以類似的方式動作。那麼爲什麼使用-> None?我知道使用Python的None

注意:我嘗試在Google和Stack Overflow中通過「 - > in Python」進行搜索。 沒有出現。爲自己而努力。那時我甚至不知道術語type hints

+0

'foo1'正在使用[type hints](https://docs.python.org/3/library/typing.html) – idjaw

+0

另請參閱:http://stackoverflow.com/questions/29770412/how-why -does-python-type-hinting-syntax-work – TerryA

+0

@ JimFasarakis-Hilliard首先,我嘗試在Google和Stack Overflow中通過「 - > in Python」進行搜索。沒有出現爲你自己嘗試。我不知道術語類型暗示。那麼我能做些什麼呢? – BlackBeard

回答

2

這叫做type hinting,僅用於幫助程序員更容易理解程序的返回和輸入類型,以及允許外部linting和靜態分析程序在Python上工作。 Here is the official RFC explaining why it exists

類型提示未實際使用被Python無論如何(因爲Python是動態類型 - 類型是在運行時決定,而不是在編譯時,當源實際上是解析),並且可以被安全地省略。

符合您版本2的功能在任何情況下都是完美無瑕的。

Python 3內置支持typing模塊的類型提示,而Python 2.7需要第三方mypy模塊。

+1

更確切地說,'typing'模塊是Python 3.5標準庫的一部分,但必須作爲第三方庫安裝對於Python 2.7到3.4。但是,在Python 3.0中添加了_syntax_函數註釋 - 要在Python 2.7中使用類型註釋,您需要使用PEP中描述的形式的註釋。無論您使用的是哪個版本的Python,您都需要安裝第三方類型檢查程序,無論是mypy,pytype,Pycharm的內置檢查程序等等(事實證明,這裏有一個新興的圖書館和工具生態系統瞭解類型提示)。 – Michael0x2a