前幾天有同學(xué)問到,這個寫法是什么意思:
def add(x:int, y:int) -> int: return x + y
我們知道 Python 是一種動態(tài)語言,變量以及函數(shù)的參數(shù)是 不區(qū)分類型 。因此我們定義函數(shù)只需要這樣寫就可以了:
def add(x, y): return x + y
這樣的好處是有極大的靈活性,但壞處就是對于別人代碼,無法一眼判斷出參數(shù)的類型,IDE 也無法給出正確的提示。
于是 Python 3 提供了一個新的特性:
函數(shù)注解
也就是文章開頭的這個例子:
def add(x:int, y:int) -> int: return x + y
用 : 類型 的形式指定函數(shù)的 參數(shù)類型 ,用 -> 類型 的形式指定函數(shù)的 返回值 類型。
然后特別要強調(diào)的是,Python 解釋器 并不會 因為這些注解而提供額外的校驗,沒有任何的類型檢查工作。也就是說,這些類型注解加不加,對你的代碼來說
沒有任何影響 :
輸出:
但這么做的好處是:
讓別的程序員看得更明白
讓 IDE 了解類型,從而提供更準確的代碼提示、補全和語法檢查(包括類型檢查,可以看到 str 和 float 類型的參數(shù)被高亮提示)
在函數(shù)的 __annotations__ 屬性中會有你設(shè)定的注解:
輸出:
在 Python 3.6 中,又引入了對 變量類型 進行注解的方法:
a: int = 123 b: str = "hello"
更進一步,如果你需要指明一個全部由整數(shù)組成的列表:
from typing import List l: List[int] = [1, 2, 3]
但同樣,這些僅僅是“ 注解 ”,不會對代碼產(chǎn)生任何影響。
不過,你可以通過 mypy 庫來檢驗最終代碼是否符合注解。
安裝 mypy:
pip install mypy
執(zhí)行代碼:
mypy test.py
如果類型都符合,則不會有任何輸出,否則就會給出類似輸出:
這些新特性也許你并不會在代碼中使用,不過當你在別人的代碼中看到時,請按照對方的約定進行賦值或調(diào)用。
當然,也不排除 Python 以后的版本把類型檢查做到解釋器里,誰知道呢。
════
其他文章及回答:
如何自學(xué)Python |
新手引導(dǎo) |
精選Python問答
| Python單詞表 |
區(qū)塊鏈 |
人工智能
歡迎關(guān)注: Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42015.html
摘要:上一篇文章標準庫內(nèi)置類型文本序列類型下一篇文章二進制序列類型操作二進制數(shù)據(jù)的核心內(nèi)置類型是和。另請參見內(nèi)置類型。存在一個反向轉(zhuǎn)換函數(shù),可以將對象轉(zhuǎn)換為對應(yīng)的十六進制表示。返回子序列在范圍內(nèi)非重疊出現(xiàn)的次數(shù)。 上一篇文章:Python標準庫---12、內(nèi)置類型:文本序列類型(str)下一篇文章: 二進制序列類型 --- bytes, bytearray, memoryview 操作二進制...
摘要:函數(shù)內(nèi)省的內(nèi)容到此結(jié)束。函數(shù)式編程并不是一個函數(shù)式編程語言,但通過和等包的支持,也可以寫出函數(shù)式風格的代碼。 《流暢的Python》筆記。本篇主要講述Python中函數(shù)的進階內(nèi)容。包括函數(shù)和對象的關(guān)系,函數(shù)內(nèi)省,Python中的函數(shù)式編程。 1. 前言 本片首先介紹函數(shù)和對象的關(guān)系;隨后介紹函數(shù)和可調(diào)用對象的關(guān)系,以及函數(shù)內(nèi)省。函數(shù)內(nèi)省這部分會涉及很多與IDE和框架相關(guān)的東西,如果平時...
摘要:概述簡介對注解處理提供了兩點改進,可重復(fù)的注解及可用于類型的注解重復(fù)注解要想定義重復(fù)注解,必須給它定義的容器類,還要使用注解修飾一下容器類測試方法獲取方法上的注解類型注解就是向添加一種類型使用本文首發(fā)于凌風博客新特性之重復(fù)注解與類型注解作者 1. 概述 1.2 簡介 Java 8 對注解處理提供了兩點改進,可重復(fù)的注解及可用于類型的注解 2. 重復(fù)注解 要想定義重復(fù)注解,必須給它定義的...
摘要:上一篇小樂給大家說了樂字節(jié)新特性之,接下來小樂繼續(xù)給大家說一說新特性之和重復(fù)注解與類型注解。內(nèi)部類與方法相關(guān)的內(nèi)部類這是一個靜態(tài)類。也是一個靜態(tài)類。 上一篇小樂給大家說了《樂字節(jié)-Java8新特性之Date API》,接下來小樂繼續(xù)給大家說一說Java8新特性之Base64和重復(fù)注解與類型注解。 一、Base64 在Java 8中,內(nèi)置了Base64編解碼相關(guān)的特性。Java 8中使用...
摘要:于是抽時間看了看以后各個版本的特性,做了一個總結(jié)。年和公開版本發(fā)布,取名為。此后對應(yīng)版本就是,。發(fā)布,是一個重大版本更新。在此之后,就是每六個月發(fā)布一次新版本。以上和參考資料聊了一些關(guān)于的歷史,下面我們看看各個版本有那些新特性。 【這是 ZY 第 11 篇原創(chuàng)技術(shù)文章】 某天在網(wǎng)上閑逛,突然看到有篇介紹 Java 11 新特性的文章,頓時心里一驚,畢竟我對于 Java 的版本認識...
閱讀 2667·2021-11-23 09:51
閱讀 1651·2021-11-22 13:54
閱讀 2790·2021-11-18 10:02
閱讀 948·2021-08-16 10:57
閱讀 3563·2021-08-03 14:03
閱讀 1880·2019-08-30 15:54
閱讀 3535·2019-08-23 14:39
閱讀 607·2019-08-23 14:26