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