国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 中 is 語法帶來的誤解

Yuqi / 3507人閱讀

摘要:起步的成功一個(gè)原因是它的可讀性,代碼清晰易懂,更容易被人類所理解,但有時(shí)可讀性會(huì)產(chǎn)生誤解。的誤解但是如果你嘗試這個(gè)判斷不見得管用。用來檢查左側(cè)和右側(cè)是否是完全相同的對(duì)象。每種語言的結(jié)構(gòu)都存在一些出乎意料的使用。

起步

Python 的成功一個(gè)原因是它的可讀性,代碼清晰易懂,更容易被人類所理解,但有時(shí)可讀性會(huì)產(chǎn)生誤解。

假如要判斷一個(gè)變量是不是 17,那可以:

if x is 17:

x 是 17 肯定是比 x == 17 更加口語化的。

is的誤解

但是如果你嘗試:

if name is "weapon":

這個(gè)判斷不見得管用。is 用來檢查左側(cè)和右側(cè)是否是完全相同的對(duì)象。如果有兩個(gè)不同的字符串對(duì)象,每個(gè)對(duì)象的值是相同的,應(yīng)該使用 == 來判斷,因?yàn)?is 的用法與口語上的區(qū)別挺大的:

if 999 + 1 is 1000:  # False

正因?yàn)檫@樣的誤解,在 if 判斷條件上容易讓初學(xué)者掉坑:

answer = "yes"
if answer is "y" or "yes":

你會(huì)發(fā)現(xiàn)不管變量是什么值,判斷都是為真。因?yàn)?is 的優(yōu)先級(jí)高,相當(dāng)于 if (answer is "y") or ("yes")

正確的方法應(yīng)該是 if answer == "y" or answer == "yes" 或者 if answer in ("y", "yes")

is not 上的混淆
>>> "something" is not None
True
>>> "something" is (not None)
False

is not 是一個(gè)二元運(yùn)算符,應(yīng)該視為一個(gè)整體,不要因?yàn)橹虚g空格而當(dāng)成兩個(gè)詞。底層上,它們也是一個(gè)操作符,CPython 將 s is not None 翻譯成的字節(jié)碼為:

 6 LOAD_NAME                0 (s)
 8 LOAD_CONST               1 (None)
10 COMPARE_OP               9 (is not)

is not 是對(duì) is 相對(duì)應(yīng)的操作符。也可以視為是將 is 判斷的結(jié)果再進(jìn)行取反。

總結(jié)

我同意 Python 非常易讀。每種語言的結(jié)構(gòu)都存在一些“出乎意料”的使用。這并不影響我對(duì) Python 這門語言的喜愛,每個(gè)人都應(yīng)該好好學(xué)習(xí),并小心使用選擇的語言。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43713.html

相關(guān)文章

  • 備胎自我修養(yǎng)——趣談 JavaScript ASI (Automatic Semicolon

    摘要:行結(jié)束符之后的符號(hào)有二義性,使得該符號(hào)與上條語句能夠無縫對(duì)接,不導(dǎo)致語法錯(cuò)誤。然而在中,有幾種特殊語句是不允許行結(jié)束符存在的。如果語句中有行結(jié)束符,會(huì)優(yōu)先認(rèn)為行結(jié)束符表示的是語句的結(jié)束,這在標(biāo)準(zhǔn)中稱為限制產(chǎn)生式。 showImg(https://segmentfault.com/img/bVmyZB); 什么是 ASI ? 自動(dòng)分號(hào)插入 (automatic semicolon i...

    _ipo 評(píng)論0 收藏0
  • 編程語言之問:何時(shí)該借用,何時(shí)該創(chuàng)造?

    摘要:普通可迭代對(duì)象只有魔術(shù)方法,而不像迭代器一樣擁有魔術(shù)方法,這意味著它無法實(shí)現(xiàn)自遍歷過程,同時(shí)在經(jīng)過循環(huán)的它遍歷后,也不會(huì)破壞原有的結(jié)構(gòu)。這兩個(gè)是我創(chuàng)造的概念,詳見進(jìn)階迭代器與迭代器切片。 showImg(https://segmentfault.com/img/remote/1460000019621809); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)勿轉(zhuǎn)載。 原文地址:...

    spademan 評(píng)論0 收藏0
  • 為什么print在Python 3變成了函數(shù)?

    摘要:如果你以逗號(hào)為分隔符,傳遞額外的參數(shù),這些參數(shù)會(huì)被傳遞至函數(shù),最終打印時(shí)每個(gè)參數(shù)之間會(huì)空一格。從上面的示例代碼中我們就可以看出,使用函數(shù)有明顯的好處與使用語句相比,我們現(xiàn)在能夠指定其他的分隔符和結(jié)束符。這就是為什么將變成函數(shù)的原因。 本文首發(fā)于編程派的微信公眾號(hào)。 原作者:Brett Cannon 原文鏈接:http://www.snarky.ca/why-print-became-...

    taoszu 評(píng)論0 收藏0
  • [零基礎(chǔ)學(xué)Python]賦值,簡(jiǎn)單也不簡(jiǎn)單

    摘要:以上原則,是基本原則。比如用指一組賬號(hào),就會(huì)被人誤解為是類型的數(shù)據(jù),事實(shí)上可能是也可能不是。不論如何,要記住一個(gè)標(biāo)準(zhǔn)明確賦值語句對(duì)于賦值語句,看官已經(jīng)不陌生了。其實(shí),賦值的樣式不少,核心就是將變量和某對(duì)象對(duì)應(yīng)起來。 變量命名 在《初識(shí)永遠(yuǎn)強(qiáng)大的函數(shù)》一文中,有一節(jié)專門討論取名字的學(xué)問,就是有關(guān)變量名稱的問題,本溫故而知新的原則,這里要復(fù)習(xí): 名稱格式:(下劃線或者字母)+(任意數(shù)目...

    church 評(píng)論0 收藏0
  • 這5篇文章將使你成為一個(gè)Angular Change Detection專家。

    摘要:編寫工作首先介紹了一個(gè)稱為的內(nèi)部組件表示,并解釋了變更檢測(cè)過程在視圖上運(yùn)行。本文主要由兩部分組成第一部分探討錯(cuò)誤產(chǎn)生的原因,第二部分提出可能的修正。它對(duì)我意義重大,它能幫助其他人看到這篇文章。 在過去的8個(gè)月里,我大部分空閑時(shí)間都是reverse-engineering Angular。我最感興趣的話題是變化檢測(cè)。我認(rèn)為它是框架中最重要的部分,因?yàn)樗?fù)責(zé)像DOM更新、輸入綁定和查詢列表...

    Coly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<