chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(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ū),但是我覺(jué)得這樣一種語(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)目的起初幾周這讓人感覺(jué)良好。不過(guò)接下來(lái)一周你可能離開(kāi)這個(gè)項(xiàng)目去改進(jìn)以前寫(xiě)的另一些代碼。或者你需要和一個(gè)同事一起編程。

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

解決方案

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

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ō)話(返回小寫(xiě)字母)。如果我們期望將來(lái)有更多說(shuō)話者的類型,那么這種寫(xiě)法會(huì)變得累贅嗎?會(huì),但這大概意味著我們應(yīng)該引入基類。

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

一個(gè)額外的好處是,PyCharm等許多IDE支持類型提示,如果你沒(méi)有傳入恰當(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有類型提示。有了類型提示,閱讀其他人的代碼要容易太多?。?/p>

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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

    文章

    4956

    瀏覽量

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

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51234
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4866

    瀏覽量

    89801

原文標(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常見(jiàn)異常類型

    python常見(jiàn)異常類型在程序運(yùn)行過(guò)程中,總會(huì)遇到各種各樣的問(wèn)題和錯(cuò)誤。有些錯(cuò)誤是我們編寫(xiě)代碼時(shí)自己造成的,比如語(yǔ)法錯(cuò)誤、調(diào)用錯(cuò)誤,甚至邏輯錯(cuò)誤。下面這個(gè)例子,在輸入 if 后輸入回車(chē)了,沒(méi)有按照
    發(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 ?1787次閱讀

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

    字典類型在實(shí)際的python開(kāi)發(fā)中,使用特別頻繁,結(jié)合本人多年的工作經(jīng)驗(yàn),現(xiàn)將字典的使用以及字典使用注意事項(xiàng)總結(jié)如下:
    的頭像 發(fā)表于 01-19 17:49 ?4075次閱讀
    <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 ?5495次閱讀
    <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 ?1956次閱讀

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

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

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

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

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

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

    python中的set類型

    Python中的set類型是一種無(wú)序、可變的集合數(shù)據(jù)類型,它的主要特點(diǎn)是不允許重復(fù)元素的存在。本文將詳盡、詳實(shí)、細(xì)致地介紹set類型的使用場(chǎng)景、常用操作以及與其他
    的頭像 發(fā)表于 11-21 16:25 ?1769次閱讀