日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python的類型系統(tǒng)

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-11-24 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:Feedly聯(lián)合創(chuàng)始人、大數(shù)據(jù)與機(jī)器學(xué)習(xí)主管Kireet Reddy分享了對(duì)Python類型提示的看法。

升級(jí)到Python 3.6后,突然發(fā)現(xiàn)Python通過(guò)typing模塊加入了類型提示。我得承認(rèn),我并不非常熟悉python社區(qū),但是我覺得這樣一種語(yǔ)言特性應(yīng)該會(huì)引起不小的反響。

不管怎么說(shuō),我對(duì)這個(gè)新特性非常滿意。在我職業(yè)生涯的大部分時(shí)間里,我在Java這個(gè)靜態(tài)類型的世界中工作,python的類型提示多少提供了一些我很懷念的必需結(jié)構(gòu)。

Python的類型系統(tǒng)

Python是一個(gè)動(dòng)態(tài)類型語(yǔ)言,所謂的“鴨子類型”。使用Python編程時(shí),動(dòng)態(tài)類型大概是一把至為鋒利的雙刃劍。

基本上這意味著,Python并不會(huì)在編譯步驟預(yù)先檢查所有使用的類型是合法的,Python程序?qū)⒗^續(xù)愉快地運(yùn)行下去,直到運(yùn)行不下去為止,這時(shí)它會(huì)拋出一個(gè)TypeError。例如,下面這段Java代碼編譯不過(guò):

publicstaticint add(int a, int b) { return a+b;}

...

add(1, "1");

Java編譯器會(huì)立即抱怨傳入了一個(gè)不兼容的類型。然而,你最喜歡的python IDE一點(diǎn)也不會(huì)抱怨這段等價(jià)的Python代碼:

def add(a,b):

return a+b

...

add(1,"1")

你需要運(yùn)行代碼,才能碰到報(bào)錯(cuò)(整型和字符串無(wú)法相加)。

這真是糟糕。但是看看這個(gè):

>>> add(‘hello’, ‘world’)

‘helloworld’

>>> add([1,2,3], [4,5,6])

[1, 2, 3, 4, 5, 6]

好吧,看來(lái)動(dòng)態(tài)類型也不完全是壞事。這同樣適用于類,只要對(duì)象存在恰當(dāng)?shù)姆椒?,python代碼可以直接工作,無(wú)需使用接口

classDog(object):

def talk(self, quietly):

return'woof'if quietly else'BARK'

classCat(object):

def talk(self, quietly):

return'purr'if quietly else'YOWL'

def speak(a, quietly):

print(a.talk(quietly))

>>> speak(Dog())

woof

>>> speak(Cat())

meow

妙!少打很多字,代碼非常凝練。

問(wèn)題

在python項(xiàng)目的起初幾周這讓人感覺良好。不過(guò)接下來(lái)一周你可能離開這個(gè)項(xiàng)目去改進(jìn)以前寫的另一些代碼。或者你需要和一個(gè)同事一起編程。

過(guò)了一段時(shí)間你回頭看代碼的時(shí)候,或者同事看你的代碼的時(shí)候,看到speak(x)這行會(huì)覺得x太含糊。于是決定跳轉(zhuǎn)到speak的定義,結(jié)果看到了a.talk。下面就沒法進(jìn)一步跳轉(zhuǎn)到定義追蹤下去了,需要手動(dòng)搜索查看哪些地方實(shí)現(xiàn)了talk這一方法,接著還需要查看這些方法做了什么,嘗試推斷出speak在talk上施加的一般契約。

解決方案

類型提示讓你可以提供更多的上下文。重寫上面的代碼:

classDog(Animal):

def talk(self, quietly: bool) -> str:

return'woof'if quietly else'BARK'

classCat(Animal):

def talk(self, quietly: bool) -> str:

return'purr'if quietly else'YOWL'

def speak(a:Union[Dog, Cat], quietly: bool) -> None:

print(a.talk(quietly))

你可能已經(jīng)注意到了,類型提示位于冒號(hào)和箭頭之后。注意它傳遞的額外信息。現(xiàn)在我們一眼就能看到speak期望Dog或Cat,而布爾值標(biāo)記指明是否應(yīng)該小聲說(shuō)話(返回小寫字母)。如果我們期望將來(lái)有更多說(shuō)話者的類型,那么這種寫法會(huì)變得累贅嗎?會(huì),但這大概意味著我們應(yīng)該引入基類。

沒有類型提示,基本上很難編寫不言自明(self-documenting)的代碼。你將不得不重度依賴極好的命名,一絲不茍的注釋,還有代碼的清潔程度。這其實(shí)是相當(dāng)高的門檻。

一個(gè)額外的好處是,PyCharm等許多IDE支持類型提示,如果你沒有傳入恰當(dāng)?shù)膮?shù),會(huì)通過(guò)下劃曲線標(biāo)出錯(cuò)誤。

我強(qiáng)烈建議在新代碼中使用類型提示,接著逐漸更新老代碼。它們不僅為你節(jié)省了一些閱讀代碼的時(shí)間,更重要的是減輕了記住你所有的變量應(yīng)該是什么類型的心智負(fù)擔(dān)。

如果你想了解更多關(guān)于類型提示的內(nèi)容,請(qǐng)查看python文檔。升級(jí)到Python 3.6后我們?cè)贔eedly強(qiáng)調(diào)了類型提示的重要性,后來(lái)我收到了這么一條slack消息:

(譯文:加入feedly前我并不知道python有類型提示。有了類型提示,閱讀其他人的代碼要容易太多!)

一切如你所想地工作的時(shí)候,感覺真不錯(cuò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74420
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1673

    瀏覽量

    51965
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4889

    瀏覽量

    90332

原文標(biāo)題:給Python加上額外的類型提示值得嗎?

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Python中常用的數(shù)據(jù)類型

    數(shù)據(jù)類型是每種編程語(yǔ)言必備屬性,只有給數(shù)據(jù)賦予明確的數(shù)據(jù)類型,計(jì)算機(jī)才能對(duì)數(shù)據(jù)進(jìn)行處理運(yùn)算,因此,正確使用數(shù)據(jù)類型是十分必要的,不同的語(yǔ)言,數(shù)據(jù)類型類似,但具體表示方法有所不同,以下是
    發(fā)表于 04-19 15:14

    python的數(shù)據(jù)類型有哪些?

    python的數(shù)據(jù)類型有哪些?Python定義函數(shù)一般格式是什么?
    發(fā)表于 12-27 06:26

    2.2 python字符串類型

    2.2 python字符串類型1. 如何定義字符串?字符串是Python中最常用的數(shù)據(jù)類型之一。使用單引號(hào)或雙引號(hào)來(lái)創(chuàng)建字符串,使用三引號(hào)創(chuàng)建多行字符串。字符串要么使用兩個(gè)單引號(hào),要么
    發(fā)表于 02-17 17:12

    python常見異常類型

    python常見異常類型在程序運(yùn)行過(guò)程中,總會(huì)遇到各種各樣的問(wèn)題和錯(cuò)誤。有些錯(cuò)誤是我們編寫代碼時(shí)自己造成的,比如語(yǔ)法錯(cuò)誤、調(diào)用錯(cuò)誤,甚至邏輯錯(cuò)誤。下面這個(gè)例子,在輸入 if 后輸入回車了,沒有按照
    發(fā)表于 03-04 16:59

    Python數(shù)據(jù)類型有幾種

    Python編程常用的數(shù)據(jù)類型:  1. 數(shù)字類型  Python數(shù)字類型主要包括int(整型)、long(長(zhǎng)整型)和float(浮點(diǎn)型)
    發(fā)表于 02-18 17:59 ?1878次閱讀

    python字典類型的使用和注意事項(xiàng)

    字典類型在實(shí)際的python開發(fā)中,使用特別頻繁,結(jié)合本人多年的工作經(jīng)驗(yàn),現(xiàn)將字典的使用以及字典使用注意事項(xiàng)總結(jié)如下:
    的頭像 發(fā)表于 01-19 17:49 ?4309次閱讀
    <b class='flag-5'>python</b>字典<b class='flag-5'>類型</b>的使用和注意事項(xiàng)

    python教程之變量和簡(jiǎn)單數(shù)據(jù)類型

    本文檔的主要內(nèi)容詳細(xì)介紹的是python教程之變量和簡(jiǎn)單數(shù)據(jù)類型
    發(fā)表于 04-26 08:00 ?7次下載
    <b class='flag-5'>python</b>教程之變量和簡(jiǎn)單數(shù)據(jù)<b class='flag-5'>類型</b>

    Python并不是弱類型語(yǔ)言

    Python是弱類型?Python并不是弱類型,Python是動(dòng)態(tài)型強(qiáng)類型語(yǔ)言。
    的頭像 發(fā)表于 04-21 17:45 ?5696次閱讀
    <b class='flag-5'>Python</b>并不是弱<b class='flag-5'>類型</b>語(yǔ)言

    循序漸進(jìn)學(xué)Python之?dāng)?shù)值類型

    本文將介紹Python語(yǔ)言的一種基本數(shù)據(jù)類型:數(shù)值類型。首先,我們會(huì)詳細(xì)介紹Python語(yǔ)言各種數(shù)值類型以及相應(yīng)的算術(shù)運(yùn)算和它們的優(yōu)先級(jí)、結(jié)
    發(fā)表于 05-31 15:11 ?4次下載

    2.2 python字符串類型

    2.2 python字符串類型 1. 如何定義字符串? 字符串是Python中最常用的數(shù)據(jù)類型之一。 使用單引號(hào)或雙引號(hào)來(lái)創(chuàng)建字符串,使用三引號(hào)創(chuàng)建多行字符串。字符串要么使用兩個(gè)單引號(hào)
    的頭像 發(fā)表于 02-17 17:08 ?2721次閱讀

    Python的數(shù)據(jù)類型與變量賦值

    Python有六個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:Numbers(數(shù)字)、String(字符串)、List(列表)、Tuple(元組)、Sets(集合)、Dictionary(字典)。
    的頭像 發(fā)表于 02-10 10:23 ?2850次閱讀

    Python最基本內(nèi)置數(shù)據(jù)類型(1)

    最基本內(nèi)置數(shù)據(jù)類型 1. 基本數(shù)據(jù)類型和運(yùn)算符 python中變量沒有類型,但是對(duì)象都有類型 pytho
    的頭像 發(fā)表于 03-08 17:17 ?1864次閱讀
    <b class='flag-5'>Python</b>最基本內(nèi)置數(shù)據(jù)<b class='flag-5'>類型</b>(1)

    淺析python的變量類型

    python不需要事先聲明變量。 python的變量類型是在運(yùn)行過(guò)程中自動(dòng)決定的,不需要代碼聲明類型
    的頭像 發(fā)表于 03-10 10:11 ?1542次閱讀
    淺析<b class='flag-5'>python</b>的變量<b class='flag-5'>類型</b>

    python變量與基本數(shù)據(jù)類型介紹

    1、前言 熟練掌握一門編程語(yǔ)言,最好的方法就是充分了解,掌握基礎(chǔ)知識(shí),并親自體驗(yàn),多敲代碼,熟能生巧。本文首先介紹python基礎(chǔ)知識(shí)的保留字與標(biāo)識(shí)符,然后將介紹在python中如何使用變量以及各種數(shù)據(jù)類型
    的頭像 發(fā)表于 07-05 15:51 ?1547次閱讀

    python中的set類型

    Python中的set類型是一種無(wú)序、可變的集合數(shù)據(jù)類型,它的主要特點(diǎn)是不允許重復(fù)元素的存在。本文將詳盡、詳實(shí)、細(xì)致地介紹set類型的使用場(chǎng)景、常用操作以及與其他
    的頭像 發(fā)表于 11-21 16:25 ?1947次閱讀
    和平区| 改则县| 重庆市| 七台河市| 巩留县| 博野县| 珲春市| 临沭县| 会理县| 舞钢市| 霍邱县| 博野县| 县级市| 连城县| 滦南县| 海丰县| 武安市| 苍溪县| 阜城县| 兴宁市| 靖宇县| 望谟县| 承德市| 来凤县| 汉阴县| 巴马| 前郭尔| 丰镇市| 东兰县| 雷波县| 聂荣县| 彝良县| 西昌市| 台山市| 深圳市| 从化市| 苗栗县| 清镇市| 馆陶县| 常熟市| 寿阳县|