python語言整數類型-Python 的內置數值類型

Python 是一種敏捷的、動態類型化的、極富表現力的開源編程語言,可以被自由地安裝到多種平臺上。Python 代碼是被解釋的。如果您對編輯、構建和執行循環較為熟悉,則 Python 代碼對您來說更簡單。但是,請不要搞錯:Python 器可以是簡單的腳本,也可以是大型的復雜程序。事實上,Python 解釋器的最大特點是鼓勵探索和簡化學習過程。如果您想證明這一點,請使用 Python 編寫著名的 Hello World! 程序:

啟動 Python 解釋器。在 UNIX 系統(包括 Mac OS X)中,啟動解釋器通常包括在命令提示行鍵入 python;在 Microsoft? Windows? 系統中,啟動 Python 命令 shell。

在 Python 提示行中,在三個大于號 (>>>) 標志后輸入 print Hello World!,然后按 Enter。

完成:沒有第三步了。清單 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

您可以看到,我使用的是運行于 Apple OS X 系統上的 Python V2.4。但是,不管操作系統是什么,基本原理都是一樣的,而且在本例中,所用的是 Python 的哪一個實際版本也無所謂。我雖然不了解您,但是此 Hello World! 練習比我學過的 C、C++ 甚至 Java? 語言的對應練習容易多了。這種簡單性就是使用 Python 解釋器的主要優點之一。開發人員可以快速試驗一個想法、研究一種對象屬性或不同算法,而無需編譯、執行和測試任何代碼。

Python 類型層次結構

從其他語言過渡到 Python 編程語言時需要學習的最重要的課程之一是,Python 中的每樣東西都是對象。這一點可能并沒有什么特別之處,尤其是對于熟悉面向對象的語言(如 C++、Java 或 C#)的人來說。然而,Python 的面向對象原理與其他語言不同,主要表現在兩個方面:第一,Python 中的所有數據值都被封裝在相關對象類中。第二,Python 程序中的所有東西都是可以從程序訪問的對象,即使是您編寫的代碼也不例外。

大多數流行的編程語言都有多個內置的數據類型,在這一方面 Python 也一樣。例如,C 編程語言具有整型和浮點類型。由于譜系相同,Java 語言和 C# 具有內置類型也不足為奇。這意味著在 C 程序中,可以編寫 int i = 100 來創建和初始化整型變量。在 Java 和 C# 中,此方法也是可能的,而且使用它們的自動裝箱功能,在需要時這兩種語言還可以把這種簡單的內置類型轉換為 Integer 對象。

另一方面,Python 不包含像 int 這樣的簡單類型 —— 只有對象類型。如果 Python 中需要整數值,將整數賦值給相應變量(如 i = 100 )即可。在后臺,Python 將創建一個整數對象,并將對新對象的引用賦值給變量。問題的關鍵是:Python 是一種動態類型化語言,所以無需聲明變量類型。事實上在單個程序中,變量的類型是可以改變(多次)的。

一種直觀演示動態類型化工作方式的簡單方法是,設想單個名為 PyObject 的基類,讓 Python 中的所有其他對象類型都繼承它。在這一模型中,您創建的所有變量都將引用在總的類層次結構中創建的對象。如果您還讓 PyObject 類記錄曾創建并分配給變量的子類的實際 類型 或名稱,則 Python 程序可正確確定程序執行過程中需要采取的步驟。

上一段描述 Python 的面向對象的模型圖像是對 Python 的實際工作方式很好的模擬。除此之外,Python 還可以使用類型函數來簡化對變量類型的確定。(本例還介紹如何使用帶有 # 字符的內聯注釋。)

清單 2. 演示 Python 簡單類型

>>> i = 100 # Create an int object whose value is 100

>>> type(i)

>>> f = 100.0

>>> type(f)

Show moreShow more icon

可以將 PyObject 類之下的所有 Python 類劃分為 Python 運行時解釋器可以使用的四個主要類別:

簡單類型 —— 基本構建塊,如 int 和 float 。

容器類型 —— 保存其他對象。

代碼類型 —— 封裝 Python 程序的元素。

內部類型 —— 程序執行期間使用的類型。

到本系列結束時,我會把所有不同類別都介紹給大家。但是在這第一篇文章中,我重點介紹簡單類型。

簡單類型

Python 有五個內置的簡單類型: bool 、 int 、 long 、 float 和 complex 。這些類型是不可變的,就是說整數對象一旦創建,其值便不可更改。相反,系統將創建新的簡單類型對象并將其賦值給變量。通過 Python id 函數,可以查看基本 PyObject 標識的變更方式:

清單 3. 使用 Python id 函數

>>> i = 100

>>> id(i)

8403284

>>> i = 101

>>> id(i)

8403296Show moreShow more icon

此方法看似容易丟失對象,會導致內存泄漏。但是,Python 像 C# 和 Java 一樣,使用了垃圾回收功能,以釋放用于保存不再引用的對象的內存,如上例中用于保存 100 的整數對象。

布爾類型

Python 中最簡單的內置類型是 bool 類型,該類型包括的對象僅可能為 True 或 False :

清單 4. bool 類型

>>> b = True

>>> type(b)

>>> id(b)

1041552Show moreShow more icon

因為只有兩個可能值,所以布爾類型是惟一的。Python 解釋器提供這僅有的(也是必需的)兩個 bool 對象: True 和 False 。在任何時候,在 Python 程序需要這些對象時,變量只能相應地引用其中一個值。清單 5 顯示 bb 變量如何具有同一個 id ,不管您直接賦予它 b 變量的值還是直接賦予它 True 對象。

清單 5. bb 變量的值

>>> b = True

>>> id(b)

1041552

>>> bb = b

>>> id(bb)

1041552

>>> bb = True

>>> id(bb)

1041552Show moreShow more icon

布爾對象名稱的大小寫是至關重要的,因為 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

在這一點上, bool 類型可能看起來不是很有用。不過顧名思義,布爾表達式是依賴于名稱的,如下所示:

清單 7. 布爾表達式

>>> b = 100 < 101

>>> print b

TrueShow moreShow more icon

很多程序利用布爾表達式,Python 提供一整套布爾比較和邏輯運算,詳細信息請分別參見表 1 和表 2。

表 1. Python 中的布爾比較運算符

運算符

描述

示例<

小于

i < 100

<=

小于等于

i <= 100

>

大于

i > 100

>=

大于等于

i >= 100

==

相等

i == 100

!=

不相等(另外使用 <>)

i != 100

補充一點,表 1 中列出的運算符優先級都一樣,除非將表達式置于括號中,否則按從左到右的順序應用。

表 2. Python 中的邏輯運算符

運算符

描述

示例not

邏輯非

not b

and

邏輯與

(i <= 100) and (b == True)

or

邏輯或

(i < 100) or (f > 100.1)

邏輯運算符的優先級低于單獨的比較運算符,這一點意義重大,因為必須先計算比較運算符,然后才能計算邏輯運算符。邏輯運算符的實際優先級就是表 2 中羅列這些運算符的順序。

在 Python 中,關于 or 和 and 邏輯運算符有意思的是,它們都是快捷運算符。簡言之,如果給定表達式 x or y ,則僅當 x 為 False 時才會計算 y 。同樣地,如果給定表達式 x and y ,則僅當 x 為 True 時,才會計算 y 。此功能可以增強表達式求值的性能(尤其是針對長的或復雜的表達式),然而對于習慣于從其他語言學來的不同規則的程序員而言,則容易犯錯。

數值類型

Python 中其他四個簡單的內置類型都是數值類型: int 、 long 、 float 和 complex 。在程序中,數值類型很常見,不管使用的是什么語言。Python 對算術運算提供完整支持,包括加法、減法、乘法和除法(參見表 3)。

表 3. Python 中的算術運算

運算符

描述

示例*

i * 100

/

i / 100

//

整除

i // 100

%

取余

f % 100

+

i + 100

i - 100

乘法和除法運算符(表 3 中列出的前四個)具有高于加法和減法的優先級。如前所述,您可以通過使用括號分組子表達式,將其分離出來以提高優先級。

Python 與 Java 語言不同,Java 語言通常定義允許的數值類型的范圍,而 Python 在這一點上更像 C,因為它的類型范圍是依賴于平臺的。您可以使用 int 和 long 兩種類型來保存整數值,它們的不同點在于 int 是一種 32 位的整數值。因而,它被限制為只能保存從 -232到 232– 1 之間的值(在多數平臺上)。與此相反,長整數類型的精度不受限,僅計算機內存對它有影響。要通知 Python 應該按照長類型處理整數,只需將 L 附加到數字的末尾,如 100L 。在 Python 中,浮點值始終是按雙精度處理的;因此 Python 的 float 類型對應于 C 類語言中的雙精度。

與數值類型相關的其他兩個重點是常量(如上例中的 100,只是明確表達的數字)和位運算。程序員一般在十進制系統(以 10 為基數)中工作。但是,有時其他系統也相當有用,尤其是我們知道計算機是基于二進制的。Python 可以提供對八進制(以 8 為基數)和十六進制(以 16 為基數)數字的支持。要通知 Python 應該按八進制數字常量處理數字,只需將零附加在前面。將一個零加上一個 x 附加在數字的前面是告訴 Python 按十六進制數值常量處理數字,如以下代碼所示:

清單 8. 通知 Python 按十六進制數值常量處理數字

>>> print 127 # Using decimal literal

127

>>> print 0177 # Using octal literal

127

>>> print 0x7F # Using hexadecimal literal

127Show moreShow more icon

當您具有容易的方式來表達數值常量時,尤其是十六進制,就可以容易地構建對應于特定測試用例的標志,這是一種常見的編程技術。例如,一個 32 位的整數可以存儲 32 個標志值。使用位測試,可以容易地測試標志變量上的特定標志。Python 中位運算的完整列表如表 4 所示。

表 4. Python 中的位運算

運算符

描述

示例~

按位求補

~b

<<

向左位移

b << 1

>>

向右位移

b >> 1

&

按位和

b & 0x01

^

按位異或

b ^ 0x01

按位或

b

0x01

至此,您可能想知道不同數值類型在單個表達式中混合出現的時候怎么辦。簡單的答復是,Python 會根據需要將表達式中的所有操作數轉換為最復雜的操作數的類型。復雜度的順序是: int、long、 float和complex`(非雙關),下面是一個簡單的示例:

清單 9. Python 將所有操作數轉換為最復雜的操作數

>>> 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 會與您預期的一樣轉換操作數,但是語言并不基于運算符轉換操作數,如 1/3 示例中所示,其計算結果為整數。如果要強制取得浮點結果,則必須確保操作數中至少有一個為浮點類型。

complex 類型

最后一種類型 complex 可能是大多數程序員難以識別的,因為它不是其他編程語言中常見的內置數據類型。而對于工程師和科學家來說,復數卻是個司空見慣的概念。從形式上講, 復數 具有實部和虛部兩個部分,都由 Python 中的 float 類型來表示。 虛數 是 -1 的平方根的倍數,用 i 或 j 表示 —— 取決于您被培養為科學家還是工程師。在 Python 中,復數的虛部被表示為 j :

清單 10. 復數的虛部

>>> c = 3.0 + 1.2j

>>> print c

(3+1.2j)

>>> print c.real, c.imag

3.0 1.2Show moreShow more icon

本例是一個實部為 3.0 和虛部為 1.2 的復數。注意,通過使用復雜對象的 real 和 imag 屬性,即可訪問復數的不同部分。

它們真是對象嗎?

到此為止,我已經介紹了 Python 只處理對象類型,然而示例中好像并沒有什么對象。最后還有一個問題,構造函數在哪里?對于簡單的內置數據類型,Python 替您做了大量的工作。不過,構造函數還在那里(其名稱與相關數據類型的名稱相同),如果您愿意,可以直接使用它們,如下所示:

清單 11. Python 構造函數

>>> 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

結束語

Python 是一種無比簡單又功能強大的語言。入門極其容易,尤其是對于已經具有 C 類語言的經驗的程序員來說。本文簡單介紹了 Python 編程語言和內置數據類型: bool 、 int 、 long 、 float 和 complex 。如果您尚未理解,則請啟動一個 Python 解釋器,并嘗試按照我上面討論的方法操作。您將會很高興,我做到的您也可以做到。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259129.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

滴滴出行2016校招編程題

1. 給定一個m*n的數組&#xff08;m,n>2,數組值>0&#xff09;&#xff0c;要求選出和最大的子2*2數組。例如&#xff1a; 1 2 3 4 5 6 7 8 9 顯然和最大的2*2子數組是5 6;8 9.下面完成這個功能。 Input: &#xff08;m*n的數組&#xff09; 1 2 3 ; 4 5 6 ; 7 8 9 …

每天一個linux命令(22):find 命令的參數詳解

find一些常用參數的一些常用實例和一些具體用法和注意事項。 1&#xff0e;使用name選項&#xff1a; 文件名選項是find命令最常用的選項&#xff0c;要么單獨使用該選項&#xff0c;要么和其他選項一起使用。 可以使用某種文件名模式來匹配文件&#xff0c;記住要用引號將文件…

(WPF) DataGrid之綁定

通過ObservableCollection 綁定到 DataGrid. 1. 前臺Xaml. <DataGrid x:Name"dgMeasurements"HorizontalAlignment"Left"Margin"10,69,0,10"ItemsSource"{Binding}"AutoGenerateColumns"False"Width"370">…

程序=數據結構+算法

這句名言&#xff0c;我現在品來很有感覺&#xff0c;看看uc/os-II里面那些就緒表、查找最高優先級任務等等&#xff0c;算法設計的非常巧妙&#xff0c;整個OS都是圍繞著OS_TCB來運轉的&#xff0c;任務需要通信&#xff0c;那就在建立個OS_EVENT&#xff0c;通過.*OSTCBEvent…

去哪筆試兩題

1&#xff0c;a是一個有序數組&#xff0c;但經過向右移動數位&#xff0c;現在預在a中查找元素key的位置&#xff0c;如不存在&#xff0c;返回0。例如a[5,6.7.8,1,2,3,4]. 實現&#xff1a; 1 #quna12 def findPos(a,key):3 mina[0];4 for i in range(len(a)):5 …

MySQL5.6主從復制搭建基于日志(binlog)

什么是MySQL主從復制 簡單來說&#xff0c;就是保證主SQL&#xff08;Master&#xff09;和從SQL&#xff08;Slave&#xff09;的數據是一致性的&#xff0c;向Master插入數據后&#xff0c;Slave會自動從Master把修改的數據同步過來&#xff08;有一定的延遲&#xff09;&…

opengl 如何加陰影_動漫嘴唇厚涂如何繪制?厚涂嘴唇正確畫法

動漫嘴唇厚涂如何繪制&#xff1f;厚涂嘴唇正確畫法&#xff01;嘴巴怎么畫&#xff1f;畫嘴巴真的很考驗一個畫師功力&#xff0c;好看的嘴巴生動而豐滿&#xff0c;可以給整幅畫作添上亮點&#xff0c;而畫的不好的嘴巴呢&#xff0c;就容易把畫面整體的風格打破。那么零基礎…

位運算

我們復習一下位運算&#xff0c;這里介紹一下(& ,|, ^)的用途。 按位與 ------------& 規則&#xff1a; 0&00 0&10 1&0 0 1&11 &#xff08; 兩位為1&#xff0c;才是1&#xff09;作用&#xff1a; 清零與保位。通常用來將特定的位清零&…

詳解JMeter函數和變量

詳解JMeter函數和變量&#xff08;1&#xff09; JMeter函數可以被認為是某種特殊的變量&#xff0c;它們可以被采樣器或者其他測試元件所引用。函數調用的語法如下&#xff1a; ${__functionName(var1,var2,var3)} 其中&#xff0c;__functionName匹配被調用的函數名稱。用圓括…

信號反射

突然想起來前幾天調試CAN通訊的時候出現的BUG&#xff0c;那就是傳說中的“信號反射”&#xff0c;也有稱“振鈴”的。錯誤剛出現的時候沒有意識過來&#xff0c;還說怎么出現重復出現這么多條消息呢&#xff1f;光在書本上看到過這個概念&#xff0c;沒有“實物”與之對應起來…

hdu 5199 map或二分或哈希

題目描述&#xff1a;給出n棵樹的高度&#xff0c;每棵樹上都站著一只鳥&#xff0c;槍手Jack站在最左邊那棵樹的左邊對鳥進行射擊&#xff0c;當Jack在高度為H的地方向右發射一顆子彈的時候&#xff0c;高度為H的樹上的鳥兒就會掉落&#xff08;注&#xff1a;其他樹上的鳥兒不…

數字電路實驗怎么接線視頻講解_家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接?手把手教你...

家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接&#xff1f;手把手教你有不少用戶收到從家庭影院器材之后&#xff0c;表示完全不會連接。翻看說明書也覺得頭大&#xff0c;知識太多&#xff0c;然而卻很難找到要點。今天主要跟大家講講如何連接音箱、功放、投影機和影…

.NET開發過程中的全文索引使用技巧之Solr

前言&#xff1a;相信許多人都聽說過.net開發過程中基于Lucene.net實現的全文索引&#xff0c;而Solr是一個高性能&#xff0c;基于Lucene的全文搜索服務器。同時對其進行了擴展&#xff0c;提供了比Lucene更為豐富的查詢語言&#xff0c;同時實現了可配置、可擴展并對查詢性能…

關于字符的讀入與輸出

在筆試中&#xff0c;經常見到字符的讀入與輸出的題目。逆序打印輸入時最常見、最基本的考題&#xff0c;復雜點的就是統計單詞、逆序打印單詞之類的。難點是如何判斷輸入的結束&#xff0c;如果用getchar函數&#xff0c;其輸入結束符為EOF&#xff08;其打印值為-1&#xff0…

修正discuz發帖首次換行無效的問題

找遍了百度和google都沒有解決方案&#xff0c;連discuz官方都沒有出來解決&#xff0c;至今其官網仍有這個問題。 那就自己動手解決吧&#xff0c;順手打個補丁。雖然走了小路&#xff0c;但是能解決問題。 解決方案&#xff1a;修改static/js/bbcode.js 找到 html2bbcode()方…

auto.js停止所有線程_Java線程與并發編程實踐:深入理解volatile和final變量

同步有兩種屬性&#xff1a;互斥性和可見性。synchronized關鍵字與兩者都有關系。Java同時也提供了一種更弱的、僅僅包含可見性的同步形式&#xff0c;并且只以volatile關鍵字關聯。假設你自己設計了一個停止線程的機制(因為無法使用Thread不安全的stop()方法))。清單1中Thread…

項目實例改編:利用structs2的action 實時顯示圖片、pdf和其他內容的框架抽取。(轉)...

轉自&#xff1a;http://www.verydemo.com/demo_c167_i1382.html 針對&#xff1a;預覽文件&#xff08;圖片&#xff0c;PDF&#xff09;文件來源為action中的inputStream 重點&#xff1a; structs2的action的配置 action的寫法和結果類型 resulttype的寫法 網頁上實…

零碎的小知識點 ----------C# ToString()函數注意事項

C#中存在著大量的字符串操作&#xff0c;有專門的string類&#xff0c;各種各種的方法&#xff0c;其中使用最為頻繁的方法為ToString()&#xff0c;用起來很是順手&#xff0c;但是這里存在一個很大的問題&#xff0c;空字符是不能用ToString方法轉換的&#xff0c;不然就會報…

ios越獄系統UIGestureRecognizer事件截獲問題

越獄的機器給self.view設置一個UITapGestureRecognizer,這貨就把所有的點擊事件全截獲了,比如某個按鈕,點擊就沒效果.普通系統是沒有問題的. 因此要給UIGestureRecognizer設置delegate并且在其中對touch的view進行分別處理 比如要讓按鈕功能正常使用: 1 #pragma mark - UIGestu…

開始Go開發之旅-Golang架構師之路系列實戰

2019獨角獸企業重金招聘Python工程師標準>>> 作者: gomaster.me(馮琪超) 系列:Golang架構師之路 巧婦難做無米之炊&#xff0c;golang sdk就是gopher的大米 下載golang 點擊 官網下載golang sdk 根據不同系統&#xff0c;官網下載鏈接會選擇相應的平臺進行鏈接跳轉&…