Python入門篇之數字_python

來源:互聯網
上載者:User

數字類型
 
數字提供了標量貯存和直接存取。它是不可更改類型,也就是說變更數位值會產生新的對象。當然,這個過程無論對程式員還是對使用者都是透明的,並不會影響軟體的開發方式。 Python 支援多種數字類型:整型、長整型、布爾型、雙精確度浮點型、十進位浮點型和複數。
建立數值對象並用其賦值
(數字對象)
建立數值對象和給變數賦值一樣同樣簡單:

複製代碼 代碼如下:

>>> anInt=1
>>> along=-555555555555L
>>> afloat=3.141595468565
>>> acomplex=1.334+4.5433j

更新數字對象

通過給數字對象(重新)賦值, 您可以“更新”一個數值對象。我們之所以給更新這兩個字加上引號,是因為實際上你並沒有更新該對象的原始數值。這是因為數值對象是不可改變對象。Python 的物件模型與常規物件模型有些不同。你所認為的更新實際上是產生了一個新的數值對象,並得到它的引用。 在學習編程的過程中, 我們一直接受這樣的教育,變數就像一個盒子, 裡面裝著變數的值。在Python中,變數更像一個指標指向裝變數值的盒子。對不可改變類型來說,你無法改變盒子的內容,但你可以將指標指向一個新盒子。每次將另外的數字賦給變數的時候,實際上建立了一個新的對象並把它賦給變數.(不僅僅是數字,對於所有的不可變類型,都是這麼回事)

複製代碼 代碼如下:

anInt += 1
aFloat = 2.718281828

通過下面的代碼測試:
 

複製代碼 代碼如下:

>>> anInt=1
>>> id(anInt)
10416152
>>> anInt+=1
>>> id(anInt)
10416140

如何刪除數字對象

按照Python的法則,你無法真正刪除一個數值對象,你僅僅是不再使用它而已。如果你實際上想刪除一個數值對象的引用,使用del語句。刪除對象的引用之後,你就不能再使用這個引用(變數名), 除非你給它賦一個新值。如果試圖使用一個已經被刪除的對象引用,會引發 NameError 異常。

複製代碼 代碼如下:

del anInt
del aLong, aFloat, aComplex 

Python的四種主要數字類型
 
1.整型
 
Python 有幾種整數類型。布爾類型是只有兩個值的整型。常規整型是絕大多數現代系統都能識別的整型。Python 也有長整數類型。然而,它表示的數值大小遠超過C 語言的長整數。下面我們先來瞭解一下這些類型,然後再來研究那些用於Python整數類型的運算子和內建函數。
 
1.1 布爾型

Python 從版本 2.3 開始支援布爾類型。該類型的取值範圍只有兩個值,也就是布爾值 True和布爾值 False。

1.2 標準整數類型

Python 的標準整數類型是最通用的數字類型。在大多數32位機器上,標準整數類型的取值範圍是-231到231-1,也就是-2,147,483,648到2,147,483,647。如果在64位機器上使用64位編譯器編譯Python,那麼在這個系統上的整數將是 64 位元。下面是一些 Python 標準整數類型對象的例子:
0101 84 -237 0x80 017 -680 -0X92
Python標準整數類型等價於C的(有符號)長整型。整數一般以十進位表示,但是 Python也支援八進位或十六進位來表示整數。如果八進位整數以數字“0”開始, 十六進位整數則以“0x”或“0X”開始。

1.3 長整型

關於Python長整數類型我們必須要提的是,請不要將它和C或其它編譯型語言的長整數類型混淆。那些語言的長整數典型的取值範圍是32位或64位。Python的長整數類型能表達的數值僅僅與你的機器支援的(虛擬)記憶體大小有關,換句話說,Python 能輕鬆表達很大很大很大的整數。長整數類型是標準整數類型的超集,當你的程式需要使用比標準整數類型更大的整數時,長整數類型就有用武之地了。在一個整數值後面加個 L(大寫或小寫都可以),表示這個整數是長整數。這個整數可以是十進位,八進位,或十六進位。下面是一些長整數的例子:

複製代碼 代碼如下:

16384L -0x4E8L 017L -2147483648l 052144364L
299792458l 0xDECADEDEADBEEFBADFEEDDEAL -5432101234L
Edit By Vheavens
Edit By Vheavens

核心風格:用大寫字母 “L”表示長整數,目前整型和長整型正在逐漸緩慢的統一,您只有在對長整數調用repr()函數時才有機會看到“L”,如果對長整數對象調用 str()函數就看不到 L。舉例如下:

複製代碼 代碼如下:

>>> aLong = 999999999l
>>> aLong
999999999L
>>> print aLong
999999999 

1.4 整型和長整型的統一
 
這兩種整數類型正在逐漸統一為一種。在 Python 2.2 以前,標準整數類型對象超出取值範圍會溢出(比如上面提到的大於 232 的數),但是從 Python2.2 以後就再也沒有這樣的錯誤了。
 

複製代碼 代碼如下:

>>> 9999 ** 8
Traceback (most recent call last):
File "<stdin>", line 1, in ?
OverflowError: integer exponentiation
Python 2.2
>>> 9999 ** 8
99920027994400699944002799920001L 

雙精確度浮點數
 
Python中的浮點數類似C語言中的double類型,是雙精確度浮點數,可以用直接的十進位或科學計數法表示。每個浮點數佔8個位元組(64位元),完全遵守IEEE754號規範(52M/11E/1S),其中52個位元用於表示底,11個位元用於表示指數(可表示的範圍大約是正負 10 的 308.25次方),剩下的一個位元表示符號。這看上去相當完美,然而,實際精度依賴於機器架構和建立 Python 解譯器的編譯器。浮點數值通常都有一個小數點和一個可選的尾碼e(大寫或小寫,表示科學計數法)。在e和指數之間可以用正(+)或負(-)表示指數的正負(正數的話可以省略符號)。下面是一些典型的浮點數值的例子:
 

複製代碼 代碼如下:

0.0 -777. 1.6 -5.555567119 96e3 * 1.0
4.3e25 9.384e-23 -2.172818 float(12) 1.000000001
3.1416 4.2E-10 -90. 6.022e23 -1.609E-19 

複數 
 
一個實數和一個虛數的組合構成一個複數。一個複數是一對有序浮點數(x, y)。表示為x + yj,其中x是實數部分,y是虛數部分。漸漸的複數在日常運算,機械,電子等行業獲得了廣泛的應用。由於一些研究人員不斷的重複製造用於複數運算的工具,在很久以前的Python1.4 版本裡,複數終於成為一個真正的Python 資料類型。
下面是 Python 語言中有關複數的幾個概念:

虛數不能單獨存在,它們總是和一個值為 0.0 的實數部分一起來構成一個複數。

複數由實數部分和虛數部分構成

表示虛數的文法: real+imagj

實數部分和虛數部分都是浮點數

虛數部分必須有尾碼j或J。


1.複數的內建屬性
複數對象擁有資料屬性,分別為該複數的實部和虛部。複數還擁有conjugate 方法,調用它可以返回該複數的共軛複數對象。
 
複數屬性

屬性                   描述
num.real             該複數的實部
num num.imag         該複數的虛部
num.conjugate()      返回該複數的共軛複數

複製代碼 代碼如下:

>>> c=2.3+2.5j
>>> c.real
2.3
>>> c.imag
2.5
>>> c.conjugate()
(2.3-2.5j)

運算子
 
數實值型別可進行多種運算。從標準運算子到數值運算子,甚至還有專門的整數運算子。

5.5.1 混合模式運算子

Python支援不同的數字類型相加。當一個整數和一個浮點數相加時, 系統會決定使用整數加法還是浮點數加法(實際上並不存在混合運算)。Python使用數字類型強制轉換的方法來解決數字類型不一致的問題,也就是說它會強制將一個運算元轉換為同另一個運算元相同的資料類型。這種操作不是隨意進行的, 它遵循以下基本規則:
 
首先,如果兩個運算元都是同一種資料類型,沒有必要進行類型轉換。僅當兩個運算元類型不一致時, Python才會去檢查一個運算元是否可以轉換為另一類型的運算元。如果可以,轉換它並返迴轉換結果。
 
由於某些轉換是不可能的,比如果將一個複數轉換為非複數類型,將一個浮點數轉換為整數等等,因此轉換過程必須遵守幾個規則。要將一個整數轉換為浮點數,只要在整數後面加個.0就可以了。要將一個非複數轉換為複數,則只需要要加上一個 “0j”的虛數部分。
 
這些類型轉換的基本原則是: 整數轉換為浮點數,非複數轉換為複數。在 Python 語言參考中這樣描述coerce()方法:
如果有一個運算元是複數, 另一個運算元被轉換為複數。
否則,如果有一個運算元是浮點數, 另一個運算元被轉換為浮點數。
否則, 如果有一個運算元是長整數,則另一個運算元被轉換為長整數;
否則,兩者必然都是普通整數,無須類型轉換。
數字類型之間的轉換是自動進行的,程式員無須自己編碼處理類型轉換。Python 提供了 coerce() 內建函數來協助你實現這種轉換。
 
參見下面的流程圖闡釋了強制轉換的規則:

算術運算子
 
Python 支援單目運算子正號(+)和負號(-), 雙目運算子, +,-,*,/,%,還有 ** ,分別表示加法,減法,乘法,除法,取餘,和冪運算。從 Python2.2 起,還增加了一種新的整除運算子//。

傳統除法
如果是整數除法, 傳統除法會捨去小數部分,返回一個整數(地板除)。如果運算元之一是浮點數,則執行真正的除法。包括 Python 語言在內的很多語言都是這種行為。看下面的例子:

複製代碼 代碼如下:

>>> 1 / 2 # perform integer result (floor) # 地板除
0
>>> 1.0 / 2.0 # returns actual quotient#真正除法
0.5 

真正的除法 
 
除法運算總是返回真實的商,不管運算元是整數還是浮點數。在未來版本的 Python中,這將是除法運算的標準行為。現階段通過執行from __future__ import division指令,也可以做到這一點。
 

複製代碼 代碼如下:

>>> from __future__ import division
>>>
>>> 1 / 2 # returns real quotient
0.5
>>> 1.0 / 2.0 # returns real quotient
0.5 

地板除

從Python 2.2開始,一個新的運算子//已經被增加進來,以執行地板除:// 除法不管運算元何種數實值型別,總是捨去小數部分,返回數字序列中比真正的商小的最接近的數字。
 

複製代碼 代碼如下:

>>> 1 // 2 # floors result, returns integer # 地板除, 返回整數
0
>>> 1.0 // 2.0 # floors result, returns float # 地板除, 返回浮點數
0.0
>>> -1 // 2 # move left on number line# 返回比 –0.5 小的整數, 也就是 -1
-1 

冪運算

冪運算操作符和一元操作符之間的優先順序關係比較特別:冪運算操作符比其左側運算元的一元操作符優先順序低,比起右側運算元的一元操作符的優先順序高,由於這個特性你會在算術運算子表中找到兩個** .下面舉幾個例子:

複製代碼 代碼如下:

>>> 3 ** 2
9
>>> -3 ** 2 # ** 優先順序高於左側的 -
-9
>>> (-3) ** 2 # 加括弧提高 -的優先順序
9
>>> 4.0 ** -1.0 # ** 優先順序低於右側的 -
0.25 

第2種情況下解譯器先計算3**2再取其相反數,我們需要給"-3"加上括弧來得到我們希望的結果。最後一個例子,結果是4**(-1),這是按照規定的優先順序獲得的結果.

複製代碼 代碼如下:

>>> 4 ** -1 
Traceback (innermost last):
 
File "<stdin>", line 1, in ?
ValueError: integer to the negative power

下面是更多 Python 數值運算的例子:

複製代碼 代碼如下:

>>> -442 - 77
-519
>>>
Edit By Vheavens
Edit By Vheavens                              
>>> 4 ** 3
64
>>>
>>> 4.2 ** 3.2
98.7183139527
>>> 8 / 3
2
>>> 8.0 / 3.0
2.66666666667
>>> 8 % 3
2
>>> (60. - 32.) * ( 5. / 9. )
15.5555555556
>>> 14 * 0x04
56
>>> 0170 / 4
30
>>> 0x80 + 0777
639
>>> 45L * 22L
990L
>>> 16399L + 0xA94E8L
709879L
>>> -2147483648L - 52147483648L
-54294967296L
>>> 64.375+1j + 4.23-8.5j
(68.605-7.5j)
>>> 0+1j ** 2 # same as 0+(lj**2)
(-1+0j)
>>> 1+1j ** 2 # same as 1+(lj**2)
0j
>>> (1+1j) ** 2
2j 

*位元運算符(只適用於整數)
 
Python整數支援標準位元運算:取反(~),按位 與(&), 或(|) 及 異或(^) 及左移(<<)和右移(>>)。Python 這樣處理位元運算:
負數會被當成正數的2進位補碼處理。
左移和右移N位等同於無溢出檢查的2的N次冪運算:2**N。
對長整數來說, 位元運算符使用一種經修改的2進位補碼形式,使得符號位可以無限的向左擴充。取反(~)運算的優先順序與數字單目運算子相同,是所有位操作符中優先順序最高的一個。左移和右移運算的優先順序次之,但低於加減法運算。與,或,異或運算優先順序最低。所有位元運算符按優先順序高低列在表 5.4

內建函數與工廠函數
 
標準類型函數
cmp(), str() 和 type()內建函數。這些函數可以用於所有的標準類型。對數字對象來說,這些函數分別比較兩個數的大小,將數字轉換為字串,以及返回數字對象的類型。

轉換工廠函數
函數 int(), long(), float() 和 complex() 用來將其它數實值型別轉換為相應的數實值型別。從Python2.3開始,Python 的標準資料類型添加了一個新成員:布爾(Boolean)類型。從此 true 和 false 現在有了常量值即 True 和 False(不再是1和0)
 
下面是一些使用內建函數的樣本:

複製代碼 代碼如下:

>>> int(4.25555)
4
>>> long(42)
42L
>>> float(4)
4.0
>>> complex(4)
(4+0j)
>>>>>> complex(2.4, -8)
(2.4-8j)
>>>
>>> complex(2.3e-10, 45.3e4)
(2.3e-10+453000j)

功能函數
Python 有五個運算內建函數用於數值運算: abs(), coerce(), divmod(), pow(), pow() 和 round()。我們將對這些函數逐一瀏覽,並給出一些有用的例子:
 
abs()返回給定參數的絕對值。如果參數是一個複數,那麼就返回 math.sqrt(num.real2 + num.imag2)
 
coerce()僅回一個包含類型轉換完畢的兩個數值元素的元組
 
divmod()內建函數把除法和取餘運算結合起來, 返回一個包含商和餘數的元組。對整數來說,它的傳回值就是地板除和取餘操作的結果。對浮點數來說,返回的商部分是math.floor(num1/num2),對複數來說,商部分是ath.floor((num1/num2).real)。
 

複製代碼 代碼如下:

>>> divmod(10, 3)
(3, 1)
>>> divmod(10, 2.5)
(4.0, 0.0)
>>> divmod(2.5, 10)
(0.0, 2.5)
>>> divmod(2+1j, 2.3+4.3j)
(0j, (2+1j))

round()用於對浮點數進行四捨五入運算。它有一個可選的小數位元參數。如果不提供小數位參數,它返回與第一個參數最接近的整數(但仍然是浮點類型)。第二個參數告訴round 函數將結果精確到小數點後指定位元。
 

複製代碼 代碼如下:

>>> round(3)
3.0
>>> round(3.154)
3.0
>>> round(3.499999, 1)
3.5

>>> import math
>>> for n in range(10):
    print round(math.pi, n)

3.0
3.1
3.14
3.142
3.1416
3.14159
3.141593
3.1415927
3.14159265
3.141592654

數值運算內建函數:
 
函數                               功能
abs(num)                   返回num 的絕對值
coerce(num1, num2)         將num1和num2轉換為同一類型,然後以一個元組的形式返回
divmod(num1, num2)         除法-取餘運算的結合。返回一個元組(num1/num2,num1 % num2)。對浮點數和複數的商進行下舍入
pow(num1, num2, mod=1)     取num1 的num2次方,如果提供mod參數,則計算結果再對mod進行取餘運算
round(flt, ndig=0)         接受一個浮點數 flt 並對其四捨五入,儲存 ndig位小數。若不提供ndig 參數,則預設小數點後0位
round()                    僅用於浮點數
 
僅適用於整數的內建函數: 
 
函數                     操作
hex(num)           將數字轉換成十六進位數並以字串形式返回
oct(num)           將數字轉換成八位元並以字串形式返回
chr(num)           將ASCII值的數字轉換成ASCII字元,範圍只能是0 <= num <= 255
ord(chr)           接受一個 ASCII 或 Unicode 字元(長度為1的字串),返回相應的ASCII或Unicode值。
unichr(num)        接受Unicode碼值,返回 其對應的Unicode字元。所接受的碼值範圍依賴於你的Python是構建於UCS‐2還是UCS‐4

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.