數值類型,說白了就是處理各類各樣的數字,Python中的數值類型包括整型、長整型、布爾、雙精度浮點、十進制浮點和複數,這些類型在不少方面與傳統的C類型有很大的區別。javascript
Python中的數值類型都是不可變類型,意味着建立、修改數字的值,都會產生新的對象,固然這是幕後的操做,編程過程當中大可沒必要理會。java
標準整型等價於C中的有符號長整型(long),與系統的最大整型一致(如32位機器上的整型是32位,64位機器上的整型是64位),能夠表示的整數範圍在[-sys.maxint-1, sys.maxint]之間。整型字面值的表示方法有3種:十進制(經常使用)、八進制(以數字「0」開頭)和十六進制(以「0x」或「0X」開頭)。程序員
# -*- coding:utf-8 -*-
a = 0101
print 'a='+str(a)
b=64
print 'b='+str(b)
c=-237
print 'c='+str(c)
d=0x80
print 'd='+str(d)
e=-0x92
print 'e='+str(e)複製代碼
上面的代碼輸出結果爲:編程
圖2安全
長整型是整型的超集,能夠表示無限大的整數(實際上只受限於機器的虛擬內存大小)。長整型字面值的後面帶有字母「L」或「l」(推薦使用大寫的「L」)。微信
長整型和標準整型,目前已經基本統一,當數學運算遇到整型異常的狀況,在Python2.2之後的版本,會自動轉換爲長整型。例如:網絡
圖3函數
布爾型實際上是整型的子類型,布爾型數據只有兩個取值:True和False,分別對應整型的1和0。測試
每個Python對象都天生具備布爾值(True或False),進而可用於布爾測試(如用在if、while中)。編碼
如下對象的布爾值都是False,除此以外是True:
None
False(布爾型)
0(整型0)
0L(長整型0)
0.0(浮點型0)
0.0+0.0j(複數0)
''(空字符串)
[](空列表)
()(空元組)
{}(空字典)
用戶自定義的 類實例,該類定義了方法 nonzero() 或 len(),而且這些方法返回0或False
下面咱們經過幾段代理來加深對布爾類型的認識。
# -*- coding:utf-8 -*-
#基本測試
print bool(1)
print bool(True)
print bool('0')
print bool([])
pring bool((1,))複製代碼
結果以下:
下面咱們看看bool類型做爲只有0和1取值的特殊整型的特性。
# -*- coding:utf-8 -*-
#使用bool數
foo = 42
bar = foo<42
print bar
print bar+10
print '%s' %bar
print '%d' %bar複製代碼
運行結果以下:
圖5
再來驗證下沒有nonzero()方法的對象,默認是True。
#無_nozero_()
class C:pass
c=C()
print bool(c)複製代碼
運行結果以下:
圖6
2.2.3 雙精度浮點型
Python裏的浮點型數字都是雙精度,相似C語言的double類型。能夠用十進制或者科學計數法表示。下面咱們看一些典型的浮點型數字。
# -*- coding:utf-8 -*-
print 0.0
print -777.
print -5.555567119
print 96e3 * 1.0
print -1.609E-19複製代碼
運行結果以下:
在Python中,有關複數的概念以下:
. 虛數不能單獨存在,它們老是和一個值爲0.0的實數部分一塊兒來構成一個複數。
. 複數由實數部分和虛數部分組成。
. 表示虛數的語法:real+imagj.
. 實數部分和虛數部分都是浮點型。
. 虛數部分必須有後綴j或J。
下面是幾個複數的例子:
print 64.375+1j
print 1.23e-045+6.7e+089j複製代碼
運行結果以下:
圖8
2.2.5 十進制浮點型
十進制浮點一般稱爲decimal類型,主要應用於金融計算。雙精度浮點型使用的是底和指數的表示方法,在小數表示上精度有限,會致使計算不許確,decimal採用十進制表示方法,看上去能夠表示任意精度。
下面咱們看一下十進制浮點的例子。
from decimal import *
dec=Decimal('.1')
print dec
print Decimal(.1)
print dec +Decimal(.1)複製代碼
使用decimal類型,首先要引入decimal模塊,而後經過Decimal類來初始化一個Decimal對象。
運行結果以下:
下表是主要的操做類型,供參考。
在Python中同時支持不一樣數值類型的數字進行混合運算,數字類型不一致怎麼作運算?這個時候就涉及到強制類型轉換問題。這種操做不是隨意進行的,它遵循如下基本規則:
首先,若是兩個操做數都是同一種數據類型,沒有必要進行類型轉換。僅當兩個操做數類型不一致時, Python纔會去檢查一個操做數是否能夠轉換爲另外一類型的操做數。若是能夠,轉換它並返回轉換結果。
因爲某些轉換是不可能的,好比果將一個複數轉換爲非複數類型,將一個浮點數轉換爲整數等等,所以轉換過程必須遵照幾個規則。要將一個整數轉換爲浮點數,只要在整數後面加個.0就能夠了。要將一個非複數轉換爲複數,則只須要要加上一個「0j」的虛數部分。
這些類型轉換的基本原則是:整數轉換爲浮點數,非複數轉換爲複數。在 Python 語言參考中這樣描述coerce()方法:
若是有一個操做數是複數,另外一個操做數被轉換爲複數。
不然,若是有一個操做數是浮點數,另外一個操做數被轉換爲浮點數。
不然, 若是有一個操做數是長整數,則另外一個操做數被轉換爲長整數;
不然,二者必然都是普通整數,無須類型轉換。
數字類型之間的轉換是自動進行的,程序員無須本身編碼處理類型轉換。Python 提供了 coerce() 內建函數來幫助你實現這種轉換。
轉換流程圖以下圖所示:
函數 int(), long(), float() 和 complex() 用來將其它數值類型轉換爲相應的數值類型。從Python2.3開始,Python 的標準數據類型添加了一個新成員:布爾(Boolean)類型。今後 true 和 false 如今有了常量值即 True 和 False(再也不是1和0)。
下面是使用工廠函數的簡單例子。
目前咱們已經看到Python支持8進制、十進制和十六進制整型,同時還提供了oct()和hex()內建函數來返回八進制和十六進制字符串。
chr函數和ord函數分別用來將數字轉換爲字符,和字符轉換爲數字。
本節對Python數值類型作個比較全面的講解,網絡編程過程當中會有大量的數值運算。
更高級的科學計算,推薦你們瞭解下兩個著名的第三方包,NumPy和SciPy。
第2.3節《字符串、列表和元組》已經在微信訂閱號搶先發布,心急的同窗進入訂閱號(二維碼在下方),從菜單「網絡安全」—>」Python黑帽編程」進入便可。
本節視頻教程獲取方法,請掃描二維碼,在菜單「網絡安全」——>」Python黑帽編程」中找到對應的本文2.2.10節,有詳細方法。
因爲教程仍在創做過程當中,在整套教程完結前,感興趣的同窗請關注個人微信訂閱號(xuanhun521,下方二維碼),我會第一時間在訂閱號推送圖文教程和視頻教程。問題討論請加qq羣:Hacking (1羣):303242737 Hacking (2羣):147098303。