亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談Python里面None True False之間的區(qū)別

 更新時(shí)間:2020年07月09日 15:51:53   作者:dream_uping  
這篇文章主要介紹了淺談Python里面None True False之間的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

None雖然跟True False一樣都是布爾值。

雖然None不表示任何數(shù)據(jù),但卻具有很重要的作用。

它和False之間的區(qū)別還是很大的!

例子:

>>> t = None
>>> if t:
... print("something")
... else:
... print("nothing")
...
nothing

區(qū)分None和False.使用is來操作!

>>> if t is None:
... print("this is None!")
... else:
... print("this is ELSE!")
...
this is None!
>>>

雖然是個(gè)小小的區(qū)別!但是在Python里面是重要的。你需要將None和不含任何值的空數(shù)據(jù)結(jié)構(gòu)區(qū)分開。

0值的整型/浮點(diǎn)型,空字符串(‘ '),空列表([]),空元組({}),空集合(set())都是等價(jià)于False,但是不等于None。

現(xiàn)在,寫一個(gè)函數(shù):

>>> def oj(t):
... if t is None:
... print("this is None")
... elif t:
... print("this is True")
... else:
... print("this is False")
...

進(jìn)行數(shù)據(jù)測(cè)驗(yàn):

>>> oj(None)
this is None
>>> oj(True)
this is True
>>> oj(False)
this is False
>>> oj(0)
this is False
>>> oj(0.0)
this is False
>>> oj([])
this is False
>>> oj(())
this is False
>>> oj({})
this is False

以上說明,None,F(xiàn)alse,True還是有很大不同的~

補(bǔ)充知識(shí):python "0.3 == 3 * 0.1" 為False的原因

一.引入

如果你在你的解釋器中輸入以下第一行代碼:

>>> 0.3 == 3 * 0.1

False

你會(huì)發(fā)現(xiàn),輸出為False。

對(duì)于CS小白而言,對(duì)此表示費(fèi)解。

因此我查了相關(guān)的資料,進(jìn)行了一下總結(jié)。

二.浮點(diǎn)算法的問題和局限

1.計(jì)算機(jī)硬件對(duì)于浮點(diǎn)數(shù)的處理方式

首先,我們必須明白一件事情。浮點(diǎn)數(shù)在計(jì)算機(jī)硬件中表示為基數(shù)2(二進(jìn)制)的分?jǐn)?shù)。

例如:

0.125(10) == 1/10 + 2/100 + 5/1000

0.001(2) == 0/2 + 0/4 + 0/8

這兩個(gè)分?jǐn)?shù)具有相同的值,唯一的實(shí)際區(qū)別是,第一個(gè)分?jǐn)?shù)以10為基數(shù)的分?jǐn)?shù)表示,第二個(gè)分?jǐn)?shù)以2為基數(shù)。當(dāng)我們輸入0.125時(shí),計(jì)算機(jī)硬件會(huì)以第二種方式表示,而不是第一種。

但是不幸的是,大多數(shù)十進(jìn)制分?jǐn)?shù)不能完全表示為二進(jìn)制分?jǐn)?shù)。

結(jié)果是,通常我們輸入的十進(jìn)制浮點(diǎn)數(shù)僅由計(jì)算機(jī)中實(shí)際存儲(chǔ)的二進(jìn)制浮點(diǎn)數(shù)

近似。但是在十進(jìn)制不能完全表示為二進(jìn)制分?jǐn)?shù)的情況下,無論多么近似,終究不是確切值。

2.例子:對(duì)于0.1的處理

例如0.1(10),無論我們?cè)敢馐褂枚嗌賯€(gè)2位數(shù)字,十進(jìn)制值0.1都不能精確表示為2進(jìn)制小數(shù),即以2為底的1/10是無限重復(fù)的分?jǐn)?shù)。

0.1(10) == 0.0001100110011001100110011001100110011001100110011...(2)

當(dāng)我們讓它停在某個(gè)有限的位數(shù),就可以得出一個(gè)近似值。

因?yàn)镻ython浮點(diǎn)數(shù)可使用 53位精度 ,

因此輸入十進(jìn)制數(shù)時(shí)計(jì)算機(jī)內(nèi)部存儲(chǔ)的值0.1是

0.00011001100110011001100110011001100110011001100110011010(2)

這個(gè)值接近但是不等于1/10.

這也是造成print(0.3 == 3 * 0.1)輸出為False的原因。

如果要強(qiáng)制使用python輸出計(jì)算機(jī)內(nèi)保存的0.1的真實(shí)十進(jìn)制值,應(yīng)該為

>>> 0.1

0.1000000000000000055511151231257827021181583404541015625

由于這一串?dāng)?shù)字實(shí)在太長了,所以Python通過顯示舍入的值來保持?jǐn)?shù)字的可管理性。所以實(shí)際上我們看到是:

>>> 0.1

0.1

但是我們要明白,機(jī)器中的值不完全是1/10,這只是舍入了真實(shí)機(jī)器值的顯示。

3.一點(diǎn)有趣的東西

上面我們提到了Python通過顯示舍入的值來保持?jǐn)?shù)字的可管理性,我們看到的只是舍入了真實(shí)機(jī)器值的顯示。通過下面的例子,我們就可以更加清楚這一事實(shí)。

當(dāng)我們用python寫下下面的代碼時(shí),就會(huì)發(fā)現(xiàn)這個(gè)神奇的現(xiàn)象。

這本質(zhì)上是二進(jìn)制浮點(diǎn)數(shù):這不是Python中的bug,也不是代碼中的bug。在支持硬件浮點(diǎn)算術(shù)的所有語言中,都會(huì)看到同一種東西(盡管某些語言在默認(rèn)情況下或在所有輸出模式下可能不會(huì)顯示差異)。

1)0.1+0.2

>>> 0.1 + 0.2

0.30000000000000004

2)round(2.675, 2)

i)round( x [, n] )的用法

作用: 返回浮點(diǎn)數(shù)x的四舍五入值。

參數(shù):

x – 數(shù)值/數(shù)值表達(dá)式。

n – 要保留的小數(shù)位數(shù),可以省略。若省略,n默認(rèn)為0,即四舍五入到整數(shù)。

ii)round( 2.675, 2)

按照我們的邏輯來看,輸入round( 2.675, 2 ),輸出應(yīng)該為2.68。但是實(shí)際上是:

>>> round(2.675, 2)

2.67

三.表示錯(cuò)誤(選讀)

在這里我們?cè)敿?xì)說明“ 0.1”示例,并說明我們?nèi)绾巫约簩?duì)此類情況進(jìn)行準(zhǔn)確的分析。如果你不想深究其背后的原因,下面的可以忽略。

1.表示錯(cuò)誤的概念、影響和原因

(1)概念

表示錯(cuò)誤是指某些(在實(shí)際中為大多數(shù))小數(shù)部分不能完全表示為二進(jìn)制(基數(shù)為2)分?jǐn)?shù)。

(2)影響

使得Python(或Perl,C,C ++,Java,F(xiàn)ortran和其他許多語言)經(jīng)常不顯示我們所期望的確切十進(jìn)制數(shù)字。

(3)原因

如今,幾乎所有機(jī)器都使用IEEE-754浮點(diǎn)算法,并且?guī)缀跛衅脚_(tái)都將Python浮點(diǎn)數(shù)映射到IEEE-754“雙精度”。754個(gè)double包含53位精度,因此在輸入時(shí),計(jì)算機(jī)會(huì)努力將浮點(diǎn)數(shù)轉(zhuǎn)換為J / 2 ** N形式的最接近分?jǐn)?shù), 其中J是一個(gè)正好包含53位的整數(shù)。

2."0.1"的具體分析

轉(zhuǎn)化目標(biāo):1 / 10 ~= J / (2 ** N)

所以:J ~= 2 ** N / 10

1)求解N

因?yàn)镴是一個(gè)正好包含53位的整數(shù)(但是實(shí)際上最后我們用的是J的近似值( >=2 ** 52 and < 2 ** 53)是通過N計(jì)算出來的),并且N是一個(gè)整數(shù),所以我們可以得到N的最佳值是56

>>> 2**52
4503599627370496
>>> 2**53
9007199254740992
>>> 2**56/10
7205759403792793

2)求解我們要用的J的近似值

我們通過N來求解實(shí)際的J,我們實(shí)際上用的J其實(shí)是(2**N /10)四舍五入之后的值。

i)divmod(a, b)

功能: 接收兩個(gè)數(shù)字類型(非復(fù)數(shù))參數(shù),返回一個(gè)包含商和余數(shù)的元組(a // b, a % b)。

參數(shù):

a – 被除數(shù)

b – 除數(shù)

ii)求解J近似值

>>> q, r = divmod(2**56, 10)
>>> r
6

因?yàn)橛鄶?shù)為6>5,所以我們用的J的近似值是

>>> q+1

7205759403792794

3)求解"0.1"的近似值

因此,在754倍精度中,最接近1/10的最佳近似值是

7205759403792794 / 72057594037927936

【注】由于我們四舍五入,因此實(shí)際上比1/10大一點(diǎn);如果我們不進(jìn)行四舍五入,則商將小于1/10。但是在任何情況下都不能完全是 1/10!

4)獲取計(jì)算機(jī)存儲(chǔ)值

通過上面的分析,我們可以看到計(jì)算機(jī)永遠(yuǎn)不會(huì)“看到” 1/10:它看到的是上面給出的精確分?jǐn)?shù),它可以得到的最佳754倍近似值(即J的近似值)

>>> .1 * 2**56

7205759403792794.0

如果我們將該分?jǐn)?shù)乘以10 ** 30,我們可以看到其30個(gè)最高有效十進(jìn)制數(shù)字的(截?cái)啵┲担?/p>

>>> 7205759403792794 * 10**30 // 2**56

100000000000000005551115123125L

在Python 2.7和Python 3.1之前的版本中,Python將該值四舍五入為17個(gè)有效數(shù)字,即為'0.10000000000000001'。

在最新版本中,Python會(huì)基于最短的十進(jìn)制分?jǐn)?shù)顯示一個(gè)值,該值會(huì)正確舍入為真實(shí)的二進(jìn)制值,并僅得出'0.1'。

以上這篇淺談Python里面None True False之間的區(qū)別就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決python大批量讀寫.doc文件的問題

    解決python大批量讀寫.doc文件的問題

    今天小編就為大家分享一篇解決python大批量讀寫.doc文件的問題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明

    Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明

    這篇文章主要介紹了Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python向Excel寫入內(nèi)容的常用方法大全

    Python向Excel寫入內(nèi)容的常用方法大全

    將數(shù)據(jù)寫入Excel文件中,用python實(shí)現(xiàn)起來非常的簡單,這篇文章主要給大家介紹了關(guān)于Python向Excel寫入內(nèi)容的常用方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python str轉(zhuǎn)json的具體步驟

    python str轉(zhuǎn)json的具體步驟

    使用Python內(nèi)置的json模塊,可以將str轉(zhuǎn)換為JSON,本文給大家介紹python str轉(zhuǎn)json的具體步驟,文中補(bǔ)充介紹了Python-字符串str和json格式的轉(zhuǎn)換問題,感興趣的朋友一起看看吧
    2024-01-01
  • Python socket如何實(shí)現(xiàn)服務(wù)端和客戶端數(shù)據(jù)傳輸(TCP)

    Python socket如何實(shí)現(xiàn)服務(wù)端和客戶端數(shù)據(jù)傳輸(TCP)

    這篇文章主要介紹了Python socket如何實(shí)現(xiàn)服務(wù)端和客戶端數(shù)據(jù)傳輸(TCP),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python操作csv文件實(shí)例詳解

    Python操作csv文件實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Python操作csv文件的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Python中類創(chuàng)建和實(shí)例化的過程詳解

    Python中類創(chuàng)建和實(shí)例化的過程詳解

    這篇文章主要介紹了Python中類創(chuàng)建和實(shí)例化過程,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • python實(shí)現(xiàn)ID3決策樹算法

    python實(shí)現(xiàn)ID3決策樹算法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)ID3決策樹算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python控制Firefox方法總結(jié)

    Python控制Firefox方法總結(jié)

    在本文里我們給大家分享了關(guān)于如何用Python控制Firefox的知識(shí)點(diǎn)總結(jié),有此需要的朋友們可以參閱下。
    2019-06-06
  • Python 關(guān)于反射和類的特殊成員方法

    Python 關(guān)于反射和類的特殊成員方法

    本文給大家分享python關(guān)于反射和類的特殊成員方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-09-09

最新評(píng)論