色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python的類型系統

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-24 09:34 ? 次閱讀

編者按:Feedly聯合創始人、大數據與機器學習主管Kireet Reddy分享了對Python類型提示的看法。

升級到Python 3.6后,突然發現Python通過typing模塊加入了類型提示。我得承認,我并不非常熟悉python社區,但是我覺得這樣一種語言特性應該會引起不小的反響。

不管怎么說,我對這個新特性非常滿意。在我職業生涯的大部分時間里,我在Java這個靜態類型的世界中工作,python的類型提示多少提供了一些我很懷念的必需結構。

Python的類型系統

Python是一個動態類型語言,所謂的“鴨子類型”。使用Python編程時,動態類型大概是一把至為鋒利的雙刃劍。

基本上這意味著,Python并不會在編譯步驟預先檢查所有使用的類型是合法的,Python程序將繼續愉快地運行下去,直到運行不下去為止,這時它會拋出一個TypeError。例如,下面這段Java代碼編譯不過:

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

...

add(1, "1");

Java編譯器會立即抱怨傳入了一個不兼容的類型。然而,你最喜歡的python IDE一點也不會抱怨這段等價的Python代碼:

def add(a,b):

return a+b

...

add(1,"1")

你需要運行代碼,才能碰到報錯(整型和字符串無法相加)。

這真是糟糕。但是看看這個:

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

‘helloworld’

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

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

好吧,看來動態類型也不完全是壞事。這同樣適用于類,只要對象存在恰當的方法,python代碼可以直接工作,無需使用接口

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

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

問題

在python項目的起初幾周這讓人感覺良好。不過接下來一周你可能離開這個項目去改進以前寫的另一些代碼。或者你需要和一個同事一起編程。

過了一段時間你回頭看代碼的時候,或者同事看你的代碼的時候,看到speak(x)這行會覺得x太含糊。于是決定跳轉到speak的定義,結果看到了a.talk。下面就沒法進一步跳轉到定義追蹤下去了,需要手動搜索查看哪些地方實現了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))

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

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

一個額外的好處是,PyCharm等許多IDE支持類型提示,如果你沒有傳入恰當的參數,會通過下劃曲線標出錯誤。

我強烈建議在新代碼中使用類型提示,接著逐漸更新老代碼。它們不僅為你節省了一些閱讀代碼的時間,更重要的是減輕了記住你所有的變量應該是什么類型的心智負擔。

如果你想了解更多關于類型提示的內容,請查看python文檔。升級到Python 3.6后我們在Feedly強調了類型提示的重要性,后來我收到了這么一條slack消息:

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

一切如你所想地工作的時候,感覺真不錯。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4801

    瀏覽量

    68735
  • 編譯器
    +關注

    關注

    1

    文章

    1636

    瀏覽量

    49172
  • python
    +關注

    關注

    56

    文章

    4799

    瀏覽量

    84810

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

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Python中常用的數據類型

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

    總結:一文了解Python中的數字類型

    調一下Python的變量和數據類型的關系,變量只是對某個對象的引用或者說代號、名字、調用等等,變量本身沒有數據類型的概念 。只有1,[1,2],"hello"這一類對象才具有數據類型
    發表于 09-26 16:49

    python的數據類型有哪些?

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

    2.2 python字符串類型

    2.2 python字符串類型1. 如何定義字符串?字符串是Python中最常用的數據類型之一。使用單引號或雙引號來創建字符串,使用三引號創建多行字符串。字符串要么使用兩個單引號,要么
    發表于 02-17 17:12

    python常見異常類型

    python常見異常類型在程序運行過程中,總會遇到各種各樣的問題和錯誤。有些錯誤是我們編寫代碼時自己造成的,比如語法錯誤、調用錯誤,甚至邏輯錯誤。下面這個例子,在輸入 if 后輸入回車了,沒有按照
    發表于 03-04 16:59

    Python數據類型有幾種

    Python編程常用的數據類型:  1. 數字類型  Python數字類型主要包括int(整型)、long(長整型)和float(浮點型)
    發表于 02-18 17:59 ?1532次閱讀

    python字典類型的使用和注意事項

    字典類型在實際的python開發中,使用特別頻繁,結合本人多年的工作經驗,現將字典的使用以及字典使用注意事項總結如下:
    的頭像 發表于 01-19 17:49 ?3556次閱讀
    <b class='flag-5'>python</b>字典<b class='flag-5'>類型</b>的使用和注意事項

    python教程之變量和簡單數據類型

    本文檔的主要內容詳細介紹的是python教程之變量和簡單數據類型
    發表于 04-26 08:00 ?7次下載
    <b class='flag-5'>python</b>教程之變量和簡單數據<b class='flag-5'>類型</b>

    Python并不是弱類型語言

    Python是弱類型Python并不是弱類型Python是動態型強類型語言。
    的頭像 發表于 04-21 17:45 ?4920次閱讀
    <b class='flag-5'>Python</b>并不是弱<b class='flag-5'>類型</b>語言

    循序漸進學Python之數值類型

    本文將介紹Python語言的一種基本數據類型:數值類型。首先,我們會詳細介紹Python語言各種數值類型以及相應的算術運算和它們的優先級、結
    發表于 05-31 15:11 ?4次下載

    2.2 python字符串類型

    2.2 python字符串類型 1. 如何定義字符串? 字符串是Python中最常用的數據類型之一。 使用單引號或雙引號來創建字符串,使用三引號創建多行字符串。字符串要么使用兩個單引號
    的頭像 發表于 02-17 17:08 ?1444次閱讀

    Python的數據類型與變量賦值

    Python有六個標準的數據類型:Numbers(數字)、String(字符串)、List(列表)、Tuple(元組)、Sets(集合)、Dictionary(字典)。
    的頭像 發表于 02-10 10:23 ?1865次閱讀

    Python最基本內置數據類型(1)

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

    淺析python的變量類型

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

    python中的set類型

    Python中的set類型是一種無序、可變的集合數據類型,它的主要特點是不允許重復元素的存在。本文將詳盡、詳實、細致地介紹set類型的使用場景、常用操作以及與其他
    的頭像 發表于 11-21 16:25 ?933次閱讀
    主站蜘蛛池模板: 亚洲看片无码免费视频| 99国内精品| 成片免费观看视频在线网| 欧美男男网站免费观看videos | 偷窥自拍性综合图区| 国产色婷婷亚洲99精品| 亚洲精品在线不卡| 美女大本营| 出差无套内射小秘书| 亚洲免费大全| 嗯啊快停下我是你老师啊H| 国产99久久亚洲综合精品西瓜tv| 亚洲精品国产自在在线观看 | 99久久国产视频| 玩两个少妇女邻居| 久久香蕉国产线看观看精品| VIDEOSGGRATIS欧美另类| 邪恶肉肉全彩色无遮琉璃神社| 久草在在线免视频在线观看| 99久久国语露脸精品国产| 无限资源在线观看播放| 久久久黄色大片| 国产99精品视频| 中文字幕在线播放视频| 色久悠悠无码偷拍自怕| 久久久久久久国产精品视频| 扒开老师大腿猛进AAA片| 亚洲精品有码在线观看| 欧美日韩精品| 九九这里有精品| 刮伦人妇A极一片| 2022一本久道久久综合狂躁| 亚州视频一区| 清晨紧湿爱运动h高h| 久久伊人草| 国产午夜小视频| 成人人猿泰山| 91在线一区二区| 亚洲一区免费看| 午夜福利电影| 日韩欧美一区二区三区免费看|