python语言整数类型-Python 的内置数值类型
Python 是一種敏捷的、動(dòng)態(tài)類型化的、極富表現(xiàn)力的開(kāi)源編程語(yǔ)言,可以被自由地安裝到多種平臺(tái)上。Python 代碼是被解釋的。如果您對(duì)編輯、構(gòu)建和執(zhí)行循環(huán)較為熟悉,則 Python 代碼對(duì)您來(lái)說(shuō)更簡(jiǎn)單。但是,請(qǐng)不要搞錯(cuò):Python 器可以是簡(jiǎn)單的腳本,也可以是大型的復(fù)雜程序。事實(shí)上,Python 解釋器的最大特點(diǎn)是鼓勵(lì)探索和簡(jiǎn)化學(xué)習(xí)過(guò)程。如果您想證明這一點(diǎn),請(qǐng)使用 Python 編寫著名的 Hello World! 程序:
啟動(dòng) Python 解釋器。在 UNIX 系統(tǒng)(包括 Mac OS X)中,啟動(dòng)解釋器通常包括在命令提示行鍵入 python;在 Microsoft? Windows? 系統(tǒng)中,啟動(dòng) Python 命令 shell。
在 Python 提示行中,在三個(gè)大于號(hào) (>>>) 標(biāo)志后輸入 print Hello World!,然后按 Enter。
完成:沒(méi)有第三步了。清單 1 顯示了此命令的輸出。
清單 1. 用 Python 編寫的 “Hello World” 的輸出
rb% python
Python 2.4 (#1, Mar 29 2005, 12:05:39)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1495)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello World!"
Hello World!Show moreShow more icon
您可以看到,我使用的是運(yùn)行于 Apple OS X 系統(tǒng)上的 Python V2.4。但是,不管操作系統(tǒng)是什么,基本原理都是一樣的,而且在本例中,所用的是 Python 的哪一個(gè)實(shí)際版本也無(wú)所謂。我雖然不了解您,但是此 Hello World! 練習(xí)比我學(xué)過(guò)的 C、C++ 甚至 Java? 語(yǔ)言的對(duì)應(yīng)練習(xí)容易多了。這種簡(jiǎn)單性就是使用 Python 解釋器的主要優(yōu)點(diǎn)之一。開(kāi)發(fā)人員可以快速試驗(yàn)一個(gè)想法、研究一種對(duì)象屬性或不同算法,而無(wú)需編譯、執(zhí)行和測(cè)試任何代碼。
Python 類型層次結(jié)構(gòu)
從其他語(yǔ)言過(guò)渡到 Python 編程語(yǔ)言時(shí)需要學(xué)習(xí)的最重要的課程之一是,Python 中的每樣?xùn)|西都是對(duì)象。這一點(diǎn)可能并沒(méi)有什么特別之處,尤其是對(duì)于熟悉面向?qū)ο蟮恼Z(yǔ)言(如 C++、Java 或 C#)的人來(lái)說(shuō)。然而,Python 的面向?qū)ο笤砼c其他語(yǔ)言不同,主要表現(xiàn)在兩個(gè)方面:第一,Python 中的所有數(shù)據(jù)值都被封裝在相關(guān)對(duì)象類中。第二,Python 程序中的所有東西都是可以從程序訪問(wèn)的對(duì)象,即使是您編寫的代碼也不例外。
大多數(shù)流行的編程語(yǔ)言都有多個(gè)內(nèi)置的數(shù)據(jù)類型,在這一方面 Python 也一樣。例如,C 編程語(yǔ)言具有整型和浮點(diǎn)類型。由于譜系相同,Java 語(yǔ)言和 C# 具有內(nèi)置類型也不足為奇。這意味著在 C 程序中,可以編寫 int i = 100 來(lái)創(chuàng)建和初始化整型變量。在 Java 和 C# 中,此方法也是可能的,而且使用它們的自動(dòng)裝箱功能,在需要時(shí)這兩種語(yǔ)言還可以把這種簡(jiǎn)單的內(nèi)置類型轉(zhuǎn)換為 Integer 對(duì)象。
另一方面,Python 不包含像 int 這樣的簡(jiǎn)單類型 —— 只有對(duì)象類型。如果 Python 中需要整數(shù)值,將整數(shù)賦值給相應(yīng)變量(如 i = 100 )即可。在后臺(tái),Python 將創(chuàng)建一個(gè)整數(shù)對(duì)象,并將對(duì)新對(duì)象的引用賦值給變量。問(wèn)題的關(guān)鍵是:Python 是一種動(dòng)態(tài)類型化語(yǔ)言,所以無(wú)需聲明變量類型。事實(shí)上在單個(gè)程序中,變量的類型是可以改變(多次)的。
一種直觀演示動(dòng)態(tài)類型化工作方式的簡(jiǎn)單方法是,設(shè)想單個(gè)名為 PyObject 的基類,讓 Python 中的所有其他對(duì)象類型都繼承它。在這一模型中,您創(chuàng)建的所有變量都將引用在總的類層次結(jié)構(gòu)中創(chuàng)建的對(duì)象。如果您還讓 PyObject 類記錄曾創(chuàng)建并分配給變量的子類的實(shí)際 類型 或名稱,則 Python 程序可正確確定程序執(zhí)行過(guò)程中需要采取的步驟。
上一段描述 Python 的面向?qū)ο蟮哪P蛨D像是對(duì) Python 的實(shí)際工作方式很好的模擬。除此之外,Python 還可以使用類型函數(shù)來(lái)簡(jiǎn)化對(duì)變量類型的確定。(本例還介紹如何使用帶有 # 字符的內(nèi)聯(lián)注釋。)
清單 2. 演示 Python 簡(jiǎn)單類型
>>> i = 100 # Create an int object whose value is 100
>>> type(i)
>>> f = 100.0
>>> type(f)
Show moreShow more icon
可以將 PyObject 類之下的所有 Python 類劃分為 Python 運(yùn)行時(shí)解釋器可以使用的四個(gè)主要類別:
簡(jiǎn)單類型 —— 基本構(gòu)建塊,如 int 和 float 。
容器類型 —— 保存其他對(duì)象。
代碼類型 —— 封裝 Python 程序的元素。
內(nèi)部類型 —— 程序執(zhí)行期間使用的類型。
到本系列結(jié)束時(shí),我會(huì)把所有不同類別都介紹給大家。但是在這第一篇文章中,我重點(diǎn)介紹簡(jiǎn)單類型。
簡(jiǎn)單類型
Python 有五個(gè)內(nèi)置的簡(jiǎn)單類型: bool 、 int 、 long 、 float 和 complex 。這些類型是不可變的,就是說(shuō)整數(shù)對(duì)象一旦創(chuàng)建,其值便不可更改。相反,系統(tǒng)將創(chuàng)建新的簡(jiǎn)單類型對(duì)象并將其賦值給變量。通過(guò) Python id 函數(shù),可以查看基本 PyObject 標(biāo)識(shí)的變更方式:
清單 3. 使用 Python id 函數(shù)
>>> i = 100
>>> id(i)
8403284
>>> i = 101
>>> id(i)
8403296Show moreShow more icon
此方法看似容易丟失對(duì)象,會(huì)導(dǎo)致內(nèi)存泄漏。但是,Python 像 C# 和 Java 一樣,使用了垃圾回收功能,以釋放用于保存不再引用的對(duì)象的內(nèi)存,如上例中用于保存 100 的整數(shù)對(duì)象。
布爾類型
Python 中最簡(jiǎn)單的內(nèi)置類型是 bool 類型,該類型包括的對(duì)象僅可能為 True 或 False :
清單 4. bool 類型
>>> b = True
>>> type(b)
>>> id(b)
1041552Show moreShow more icon
因?yàn)橹挥袃蓚€(gè)可能值,所以布爾類型是惟一的。Python 解釋器提供這僅有的(也是必需的)兩個(gè) bool 對(duì)象: True 和 False 。在任何時(shí)候,在 Python 程序需要這些對(duì)象時(shí),變量只能相應(yīng)地引用其中一個(gè)值。清單 5 顯示 bb 變量如何具有同一個(gè) id ,不管您直接賦予它 b 變量的值還是直接賦予它 True 對(duì)象。
清單 5. bb 變量的值
>>> b = True
>>> id(b)
1041552
>>> bb = b
>>> id(bb)
1041552
>>> bb = True
>>> id(bb)
1041552Show moreShow more icon
布爾對(duì)象名稱的大小寫是至關(guān)重要的,因?yàn)?true(和 false)是未定義的:
清單 6. 未定義的 true 和 false
>>> b = true
Traceback (most recent call last):
File "", line 1, in ?
NameError: name "true" is not definedShow moreShow more icon
在這一點(diǎn)上, bool 類型可能看起來(lái)不是很有用。不過(guò)顧名思義,布爾表達(dá)式是依賴于名稱的,如下所示:
清單 7. 布爾表達(dá)式
>>> b = 100 < 101
>>> print b
TrueShow moreShow more icon
很多程序利用布爾表達(dá)式,Python 提供一整套布爾比較和邏輯運(yùn)算,詳細(xì)信息請(qǐng)分別參見(jiàn)表 1 和表 2。
表 1. Python 中的布爾比較運(yùn)算符
運(yùn)算符
描述
示例<
小于
i < 100
<=
小于等于
i <= 100
>
大于
i > 100
>=
大于等于
i >= 100
==
相等
i == 100
!=
不相等(另外使用 <>)
i != 100
補(bǔ)充一點(diǎn),表 1 中列出的運(yùn)算符優(yōu)先級(jí)都一樣,除非將表達(dá)式置于括號(hào)中,否則按從左到右的順序應(yīng)用。
表 2. Python 中的邏輯運(yùn)算符
運(yùn)算符
描述
示例not
邏輯非
not b
and
邏輯與
(i <= 100) and (b == True)
or
邏輯或
(i < 100) or (f > 100.1)
邏輯運(yùn)算符的優(yōu)先級(jí)低于單獨(dú)的比較運(yùn)算符,這一點(diǎn)意義重大,因?yàn)楸仨毾扔?jì)算比較運(yùn)算符,然后才能計(jì)算邏輯運(yùn)算符。邏輯運(yùn)算符的實(shí)際優(yōu)先級(jí)就是表 2 中羅列這些運(yùn)算符的順序。
在 Python 中,關(guān)于 or 和 and 邏輯運(yùn)算符有意思的是,它們都是快捷運(yùn)算符。簡(jiǎn)言之,如果給定表達(dá)式 x or y ,則僅當(dāng) x 為 False 時(shí)才會(huì)計(jì)算 y 。同樣地,如果給定表達(dá)式 x and y ,則僅當(dāng) x 為 True 時(shí),才會(huì)計(jì)算 y 。此功能可以增強(qiáng)表達(dá)式求值的性能(尤其是針對(duì)長(zhǎng)的或復(fù)雜的表達(dá)式),然而對(duì)于習(xí)慣于從其他語(yǔ)言學(xué)來(lái)的不同規(guī)則的程序員而言,則容易犯錯(cuò)。
數(shù)值類型
Python 中其他四個(gè)簡(jiǎn)單的內(nèi)置類型都是數(shù)值類型: int 、 long 、 float 和 complex 。在程序中,數(shù)值類型很常見(jiàn),不管使用的是什么語(yǔ)言。Python 對(duì)算術(shù)運(yùn)算提供完整支持,包括加法、減法、乘法和除法(參見(jiàn)表 3)。
表 3. Python 中的算術(shù)運(yùn)算
運(yùn)算符
描述
示例*
乘
i * 100
/
除
i / 100
//
整除
i // 100
%
取余
f % 100
+
加
i + 100
–
減
i - 100
乘法和除法運(yùn)算符(表 3 中列出的前四個(gè))具有高于加法和減法的優(yōu)先級(jí)。如前所述,您可以通過(guò)使用括號(hào)分組子表達(dá)式,將其分離出來(lái)以提高優(yōu)先級(jí)。
Python 與 Java 語(yǔ)言不同,Java 語(yǔ)言通常定義允許的數(shù)值類型的范圍,而 Python 在這一點(diǎn)上更像 C,因?yàn)樗念愋头秶且蕾囉谄脚_(tái)的。您可以使用 int 和 long 兩種類型來(lái)保存整數(shù)值,它們的不同點(diǎn)在于 int 是一種 32 位的整數(shù)值。因而,它被限制為只能保存從 -232到 232– 1 之間的值(在多數(shù)平臺(tái)上)。與此相反,長(zhǎng)整數(shù)類型的精度不受限,僅計(jì)算機(jī)內(nèi)存對(duì)它有影響。要通知 Python 應(yīng)該按照長(zhǎng)類型處理整數(shù),只需將 L 附加到數(shù)字的末尾,如 100L 。在 Python 中,浮點(diǎn)值始終是按雙精度處理的;因此 Python 的 float 類型對(duì)應(yīng)于 C 類語(yǔ)言中的雙精度。
與數(shù)值類型相關(guān)的其他兩個(gè)重點(diǎn)是常量(如上例中的 100,只是明確表達(dá)的數(shù)字)和位運(yùn)算。程序員一般在十進(jìn)制系統(tǒng)(以 10 為基數(shù))中工作。但是,有時(shí)其他系統(tǒng)也相當(dāng)有用,尤其是我們知道計(jì)算機(jī)是基于二進(jìn)制的。Python 可以提供對(duì)八進(jìn)制(以 8 為基數(shù))和十六進(jìn)制(以 16 為基數(shù))數(shù)字的支持。要通知 Python 應(yīng)該按八進(jìn)制數(shù)字常量處理數(shù)字,只需將零附加在前面。將一個(gè)零加上一個(gè) x 附加在數(shù)字的前面是告訴 Python 按十六進(jìn)制數(shù)值常量處理數(shù)字,如以下代碼所示:
清單 8. 通知 Python 按十六進(jìn)制數(shù)值常量處理數(shù)字
>>> print 127 # Using decimal literal
127
>>> print 0177 # Using octal literal
127
>>> print 0x7F # Using hexadecimal literal
127Show moreShow more icon
當(dāng)您具有容易的方式來(lái)表達(dá)數(shù)值常量時(shí),尤其是十六進(jìn)制,就可以容易地構(gòu)建對(duì)應(yīng)于特定測(cè)試用例的標(biāo)志,這是一種常見(jiàn)的編程技術(shù)。例如,一個(gè) 32 位的整數(shù)可以存儲(chǔ) 32 個(gè)標(biāo)志值。使用位測(cè)試,可以容易地測(cè)試標(biāo)志變量上的特定標(biāo)志。Python 中位運(yùn)算的完整列表如表 4 所示。
表 4. Python 中的位運(yùn)算
運(yùn)算符
描述
示例~
按位求補(bǔ)
~b
<<
向左位移
b << 1
>>
向右位移
b >> 1
&
按位和
b & 0x01
^
按位異或
b ^ 0x01
按位或
b
0x01
至此,您可能想知道不同數(shù)值類型在單個(gè)表達(dá)式中混合出現(xiàn)的時(shí)候怎么辦。簡(jiǎn)單的答復(fù)是,Python 會(huì)根據(jù)需要將表達(dá)式中的所有操作數(shù)轉(zhuǎn)換為最復(fù)雜的操作數(shù)的類型。復(fù)雜度的順序是: int、long、 float和complex`(非雙關(guān)),下面是一個(gè)簡(jiǎn)單的示例:
清單 9. Python 將所有操作數(shù)轉(zhuǎn)換為最復(fù)雜的操作數(shù)
>>> 1 / 3
0
>>> 1.0 / 3
0.33333333333333331
>>> 1.0 // 3
0.0
>>> 1 % 3
1
>>> 1.0 % 3
1.0Show moreShow more icon
盡管 Python 會(huì)與您預(yù)期的一樣轉(zhuǎn)換操作數(shù),但是語(yǔ)言并不基于運(yùn)算符轉(zhuǎn)換操作數(shù),如 1/3 示例中所示,其計(jì)算結(jié)果為整數(shù)。如果要強(qiáng)制取得浮點(diǎn)結(jié)果,則必須確保操作數(shù)中至少有一個(gè)為浮點(diǎn)類型。
complex 類型
最后一種類型 complex 可能是大多數(shù)程序員難以識(shí)別的,因?yàn)樗皇瞧渌幊陶Z(yǔ)言中常見(jiàn)的內(nèi)置數(shù)據(jù)類型。而對(duì)于工程師和科學(xué)家來(lái)說(shuō),復(fù)數(shù)卻是個(gè)司空見(jiàn)慣的概念。從形式上講, 復(fù)數(shù) 具有實(shí)部和虛部?jī)蓚€(gè)部分,都由 Python 中的 float 類型來(lái)表示。 虛數(shù) 是 -1 的平方根的倍數(shù),用 i 或 j 表示 —— 取決于您被培養(yǎng)為科學(xué)家還是工程師。在 Python 中,復(fù)數(shù)的虛部被表示為 j :
清單 10. 復(fù)數(shù)的虛部
>>> c = 3.0 + 1.2j
>>> print c
(3+1.2j)
>>> print c.real, c.imag
3.0 1.2Show moreShow more icon
本例是一個(gè)實(shí)部為 3.0 和虛部為 1.2 的復(fù)數(shù)。注意,通過(guò)使用復(fù)雜對(duì)象的 real 和 imag 屬性,即可訪問(wèn)復(fù)數(shù)的不同部分。
它們真是對(duì)象嗎?
到此為止,我已經(jīng)介紹了 Python 只處理對(duì)象類型,然而示例中好像并沒(méi)有什么對(duì)象。最后還有一個(gè)問(wèn)題,構(gòu)造函數(shù)在哪里?對(duì)于簡(jiǎn)單的內(nèi)置數(shù)據(jù)類型,Python 替您做了大量的工作。不過(guò),構(gòu)造函數(shù)還在那里(其名稱與相關(guān)數(shù)據(jù)類型的名稱相同),如果您愿意,可以直接使用它們,如下所示:
清單 11. Python 構(gòu)造函數(shù)
>>> b = bool(True)
>>> i = int(100)
>>> l = long(100)
>>> f = float(100.1)
>>> c = complex(3.0, 1.2)
>>> print b, i, l, f, c
True 100 100 100.1 (3+1.2j)Show moreShow more icon
結(jié)束語(yǔ)
Python 是一種無(wú)比簡(jiǎn)單又功能強(qiáng)大的語(yǔ)言。入門極其容易,尤其是對(duì)于已經(jīng)具有 C 類語(yǔ)言的經(jīng)驗(yàn)的程序員來(lái)說(shuō)。本文簡(jiǎn)單介紹了 Python 編程語(yǔ)言和內(nèi)置數(shù)據(jù)類型: bool 、 int 、 long 、 float 和 complex 。如果您尚未理解,則請(qǐng)啟動(dòng)一個(gè) Python 解釋器,并嘗試按照我上面討論的方法操作。您將會(huì)很高興,我做到的您也可以做到。
總結(jié)
以上是生活随笔為你收集整理的python语言整数类型-Python 的内置数值类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pycharm常用设置(keymap设置
- 下一篇: vscode可以打开jupyternot