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

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

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

Python變量很難記?常見(jiàn)的解決辦法有三種

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-09-30 09:10 ? 次閱讀

Python作為一門動(dòng)態(tài)語(yǔ)言,其變量的類型可以自由變化。這個(gè)特性提高了代碼的開(kāi)發(fā)效率,卻也增加了閱讀代碼和維護(hù)代碼的難度。

假設(shè)有一個(gè)變量is_request_finished,從名字上來(lái)看,這個(gè)變量的值應(yīng)該為True或者False,在寫代碼的時(shí)候,最初也確實(shí)是這樣定義的。但是可能由于某些原因,在某一次賦值的時(shí)候,is_request_finished = 'True'。此時(shí),如果代碼的單元測(cè)試不夠完善,那么if is_request_finished在is_request_finished = True和is_request_finished = 'True'的時(shí)候都成立,問(wèn)題被隱藏了。但是當(dāng)is_request_finished = 'False'的時(shí)候,由于'False'作為一個(gè)非空字符串,就會(huì)使得if is_request_finished依然成立,從而使程序的行為發(fā)現(xiàn)異常。

單個(gè)變量的類型異常也許還容易發(fā)現(xiàn),但是如果變量是放在字典或者列表里面,那就比較麻煩了。假設(shè)需要保存一段個(gè)人信息,于是創(chuàng)建了下面這樣一個(gè)列表套字典的數(shù)據(jù)結(jié)構(gòu):

這種方式開(kāi)發(fā)起來(lái)非常的快速而方便,但是其他人甚至是開(kāi)發(fā)者自己在一段時(shí)間以后讀代碼,都會(huì)有一種想抽死自己的沖動(dòng)。因?yàn)楦静恢肋@個(gè)變量里面保存的是什么東西。

針對(duì)以上問(wèn)題,常見(jiàn)的解決辦法有三種。

Type Hints 與 Variable Annotations

在PEP 484中,引入了Type Hints,在PEP 526中引入了Variable Annotations。它使得Python 3.6及以后的Python 代碼擁有了“聲明”變量類型的能力。這里的“聲明”之所以會(huì)打引號(hào),是因?yàn)檫@個(gè)聲明是給IDE和人看的。這個(gè)聲明對(duì) Python 的解釋器無(wú)效。

Type Hints

PyCharm現(xiàn)在已經(jīng)可以比較好地支持Type Hints了。例如下面這一段代碼:

模擬一段上傳文件的函數(shù),上傳成功以后返回True。接收一個(gè)參數(shù)url。在正常情況下,這個(gè)url應(yīng)該是一個(gè)字符串。于是,使用Type Hints,代碼可以變?yōu)椋?/p>

如果直接運(yùn)行,其運(yùn)行效果如下圖所示:

現(xiàn)在假設(shè)傳遞一個(gè)不是字符串的變量給upload函數(shù),此時(shí)PyCharm就會(huì)提示類型有問(wèn)題,如下圖所示:

但提示歸提示,強(qiáng)行運(yùn)行也是沒(méi)有問(wèn)題的。這就說(shuō)明Type Hints主要是給IDE和人用的,解釋器并不會(huì)關(guān)心類型正不正確。

如果修改這個(gè)函數(shù)的返回值,讓它不返回True或者False,PyCharm 也會(huì)發(fā)出警告:

Type Hints的官方文檔,可以參閱:typing —Support for type hints

Variable Annotations

對(duì)于Variable Annotations,如下圖所示,雖然目前PyCharm還不能很好地提示變量類型不對(duì),但是人在讀代碼的時(shí)候,還是會(huì)起到一定的幫助。

除了這種寫法外,Variable Annotations還支持把類型寫在注釋中,如下圖所示:

雖然PyCharm不能起到很好的提示作用,但是可以使用一個(gè)第三方庫(kù)mypy來(lái)對(duì)代碼做靜態(tài)檢查,其運(yùn)行效果如下圖所示,可以發(fā)現(xiàn)賦值的類型與聲明的類型不一致(expression has type “str”, variable has type “bool”, 表達(dá)式的類型為“str”,變量的類型是“bool”)。

關(guān)于Variable Annotations的更多用法,可以參閱:Syntax for Variable Annotations關(guān)于Mypy,可以參閱它的官方文檔。

docstring

在docstring來(lái)標(biāo)注變量的類型,如下圖所示:

這種寫法可以用來(lái)提示一個(gè)函數(shù),或者一個(gè)類它里面的各個(gè)變量的情況。但是詳細(xì)程度需要看開(kāi)發(fā)者有沒(méi)有耐心把這個(gè)注釋寫清楚。

Bean

這種方法來(lái)自與Java Bean的思想,它主要用來(lái)解決列表套字典,字典套字典,字典套列表,列表套列表這種深層的嵌套關(guān)系。

聲明:本文內(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)投訴
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    569

    瀏覽量

    40063
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    608

    瀏覽量

    28286
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4758

    瀏覽量

    84287

原文標(biāo)題:Python變量很難記?記住變量類型的三種方式

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GE DASH3000 監(jiān)護(hù)儀三種常見(jiàn)故障解決辦法

    01故障現(xiàn)象一:重復(fù)開(kāi)機(jī)自檢。故障分析:此現(xiàn)象是購(gòu)機(jī)不久后使用中出現(xiàn)的。原因是此款儀器自動(dòng)記錄數(shù)據(jù)的功能,卻沒(méi)有自動(dòng)清除數(shù)據(jù)的功能,當(dāng)存儲(chǔ)器存滿數(shù)據(jù)而又沒(méi)有清除時(shí),便會(huì)出現(xiàn)此現(xiàn)象。解決辦法
    發(fā)表于 09-21 15:21

    三種常見(jiàn)的PCB錯(cuò)誤是什么

    三種常見(jiàn)的PCB錯(cuò)誤是什么
    發(fā)表于 03-12 06:29

    常見(jiàn)三種無(wú)線接入方式是什么?

    藍(lán)牙無(wú)線組網(wǎng)的優(yōu)點(diǎn)是什么?常見(jiàn)三種無(wú)線接入方式是什么?藍(lán)牙無(wú)線組網(wǎng)原理與上網(wǎng)方案分享
    發(fā)表于 05-26 06:33

    交流伺服電機(jī)飛車常見(jiàn)問(wèn)題哪些解決辦法?

    交流伺服電機(jī)飛車常見(jiàn)問(wèn)題哪些解決辦法?
    發(fā)表于 09-26 09:08

    Flash鎖死的解決辦法是什么

    怎樣去選擇STM32的三種啟動(dòng)方式呢?Flash鎖死的解決辦法是什么?
    發(fā)表于 01-18 07:11

    打印機(jī)常見(jiàn)問(wèn)題及解決辦法

    打印機(jī)常見(jiàn)問(wèn)題及解決辦法 1、激光打印機(jī)預(yù)熱超過(guò)2min或定形不牢,文字脫落。 一是考慮室內(nèi)溫度是否達(dá)20℃以上; 二是檢查
    發(fā)表于 01-14 10:53 ?583次閱讀

    聲卡硬件維修的常見(jiàn)問(wèn)題及解決辦法

    聲卡硬件維修的常見(jiàn)問(wèn)題及解決辦法 常見(jiàn)故障一:聲卡無(wú)聲   出現(xiàn)這種故障常見(jiàn)的原因
    發(fā)表于 02-23 14:25 ?2489次閱讀

    Matlab編程常見(jiàn)錯(cuò)誤與解決辦法

    Matlab編程常見(jiàn)錯(cuò)誤與解決辦法求人不如求己
    發(fā)表于 03-16 15:58 ?0次下載

    linux設(shè)置環(huán)境變量三種方式

     linux設(shè)置環(huán)境變量以下三種方式
    發(fā)表于 06-15 09:05 ?1386次閱讀
    linux設(shè)置環(huán)境<b class='flag-5'>變量</b>的<b class='flag-5'>三種</b>方式

    伺服電機(jī)的三種操控辦法

    通常伺服電機(jī)首要有三種操控辦法,即速度操控辦法,轉(zhuǎn)矩操控辦法和方位操控辦法,下面別離對(duì)每種操控辦法
    的頭像 發(fā)表于 09-26 10:16 ?7592次閱讀

    針對(duì)iPhone12信號(hào)問(wèn)題,蘋果給出三種解決辦法

    解決辦法。對(duì)于這種情況,蘋果官方客服是怎么回應(yīng)的呢?他們給出了三種可能解決的辦法,但目前來(lái)看僅僅是可能而已,另外對(duì)于無(wú)服務(wù)的現(xiàn)象,他們也有自己的解讀。
    的頭像 發(fā)表于 11-10 18:01 ?4.6w次閱讀

    VGA線太短的解決辦法

    針對(duì)視頻傳輸?shù)木€纜,延長(zhǎng)無(wú)非就是2辦法,一是換一個(gè)更長(zhǎng)的線,另一加一個(gè)延長(zhǎng)器。我們?cè)谶@里3
    的頭像 發(fā)表于 01-09 09:53 ?6370次閱讀
    VGA線太短的<b class='flag-5'>解決辦法</b>

    python統(tǒng)計(jì)詞頻的三種方法

    python統(tǒng)計(jì)詞頻的三種方法方法。
    發(fā)表于 05-25 14:33 ?2次下載

    壓榨輥軸承位磨損哪些解決辦法

    壓榨輥軸承位磨損哪些解決辦法
    發(fā)表于 01-19 09:45 ?4次下載

    單片機(jī)常見(jiàn)問(wèn)題的解決思路和解決辦法

    30個(gè)單片機(jī)常見(jiàn)問(wèn)題解決辦法
    的頭像 發(fā)表于 09-18 16:51 ?2323次閱讀
    單片機(jī)<b class='flag-5'>常見(jiàn)</b>問(wèn)題的解決思路和<b class='flag-5'>解決辦法</b>