本節導航:
一、數據類型的查詢
當面對未知數據類型的數據時,我們腦子里應該有這么一個問題:我們怎樣才能查到未知數據的數據類型呢?
這里就讓我來簡單的回答下你的困惑,在Python中我們可以通過兩種內置函數來查詢對象數據類型:type() 和 isinstance() ,在此我截取了這兩個函數的部分源代碼進行參考:

class type(object): """ type(object_or_name, bases, dict) type(object) -> the object's type type(name, bases, dict) -> a new type """ ...

def isinstance(x, A_tuple): # real signature unknown; restored from __doc__ """ Return whether an object is an instance of a class or of a subclass thereof. A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B) or ...`` etc. """ pass ...
由注釋我們可以發現 type() 與 isinstance() 的區別在於:isinstance() 中返回對象即是類的實例還是是其子類的實例(即 isinstance() 會認為子類是一種父類類型)。
雖然現在我們看不懂它們的源代碼到底在說些什么,不過我們只需要知道它具體的用法即可,如果只是簡單的確定數據類型,本人傾向於使用 type() ,純粹是自我感覺 type() 簡單方便點,只需要把聲明好的變量名稱輸入在 type() 內即可,而 instance() 還必須在函數內進行數據類型的猜測判斷正誤才能得到想要的結果。在現階段中簡單判斷數據類型使用 type() 足夠了。
a = 123 print(type(a)) #<class 'int'> print(isinstance(a, int)) #True
b = '123' print(type(b)) #<class 'str'>
print(isinstance(b, int)) #False
c = True
print(type(c)) #<class 'bool'>
print(isinstance(c, bool)) #True
解決好問題后,讓我們一起來了解下常見的Python數據類型吧。

print(type(123)) #<class 'int'> print(type(1.23)) #<class 'float'> print(type("你好!")) #<class 'str'> print(type(True)) #<class 'bool'> print(type([1, 2, 3])) #<class 'list'> print(type((1, 2, 3))) #<class 'tuple'> print(type({"name": "Jane", "age": "18"})) #<class 'dict'> print(type(set([1, 2, 3]))) #<class 'set'>
二、Number 數字
Python中數字類型又包括:int(整型)、float(浮點型)和 complex(復數)
print(type(123)) #<class 'int'>
print(type(1.12)) #<class 'float'>
print(type(3j + 1)) #<class 'complex'>
在32位機器上,整數的位數為32位,取值范圍為 -2**31~2**31-1;
在64位系統上,整數的位數為64位,取值范圍為 -2**63~2**63-1;
對於我們來說,這個范圍已經挺大了,不用在意范圍太多。
在Python 3 版本以后,如果整數發生溢出,Python會自動將整數數據轉換為 long 長整數,無論多大都會顯示數據類型為 int(整型),所以本人意見是就把長整型給忘了吧,浪費腦細胞記它干嘛。
print(type(4**1000)) #<class 'int'>
浮點數是屬於有理數中某特定子集的數的數字表示,在計算機中用以近似表示任意某個實數。通俗易懂點,我們在這里就把它看成小數吧。之所以稱為浮點數,是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的。在表示很大或很小的浮點數時必須使用科學計算法表示,把10用e替代。
float 類型存放雙精度的浮點數,計算后一般精確到小數點后16位,由於精度受限,進行相等性比較不可靠。(如果需要高精度,可使用 decimal 模塊的decimal.Decimal() 函數,這種類型可以准確的表示循環小數,但是處理速度較慢,適合於財政計算。)
print(1.25*100) #125.0
print(0.125*1000) #125.0
print(12.5*10) #125.0
print(type(12.5*10)) #<class 'float'>
print(1.25e9) #1250000000.0
print(12.5e8) #1250000000.0
print(1.25e-9) #1.25e-09
print(0.00000000125) #1.25e-09
print(1/3) #0.3333333333333333
注:只要涉及浮點數的運算,其結果必為浮點型。
complex(復數)
像我們這樣的屌絲復數什么的與我們有什么關系,這輩子什么的是不會學復數了,還是忘了吧。
Python中數值有7種簡單運算:加(+)、減(-)、乘(*)、除(/)、取模(%)、冪(**)、取整除(//),在這里就列幾個例子,具體的在運算符中在進行講解。
a = 1
b = 3
print(a + b) #4
print(a - b) #-2
print(a * b) #3
print(a / b) #0.3333333333333333
print(a % b) #1
print(a ** b) #1
print(a // b) #0
c = 3
d = 10
print(c % d) #3
print(c ** d) #59049
print(c // d) #0
注:這里需要特別注意的是取模(%)運算,當分子小於分母時,結果為分子;當分子小於分母時,結果為余數(分子除以分母所得的數)。分子和分母、除數和被除數,是不是一臉懵逼,是不是發現自己好像...似乎...把小學的數學忘了,那么恭喜你,在這里給你科普下:5/8 (八分之五),5 是分子,8 是分母。分母是除數,分子是被除數。
三、String 字符串
在 Python 中,字符串是由引號(單引號 ' 或 雙引號 " )與引號中的字符一起組合而成的,其中引號只是字符串外在聲明的一種表達方式,不是字符串的一部分。
print('hello world!') #hello world! print("hello world!") #hello world!
a = "hello world!"
print(a) #hello world!
這時候我們心里該有疑慮了,既然書寫字符串中單引號( ' )和雙引號( " )都可以使用而且結果還相同,那么 Python 中為什么還會提供兩種呢?這樣不會造成我們選擇上的困難嗎?
存在即合理,請相信這一點,像我們這樣的屌絲怎么能和人家大佬相比,他們腦子都不知道怎么長得,頭肯定都禿完了(聰明人的象征)。就拿我們中文寫作來舉例吧,當寫一大段文章中我們經常會引用某人某人說什么什么話,這里的一段話可以看做是一段很長的字符串,當我們引用別人所說的話時經常會用雙引號引起來表示引用。同理可得,當字符串中需要使用到單引號或雙引號時,這時候它兩個同時存在的作用就體現出來了:
print('I'm a student.') #SyntaxError: invalid syntax
print("I'm a student.") #I'm a student.
當然這只是簡單的情況,如果字符串內部既包含 ' 又包含 " 怎么辦?這時候我們就需要引入轉義字符的概念了。這里容我賣個關子就不具體陳述了,有關內容在以后的字符串專題中進行詳細的解讀。
四、Boolean 布爾值
Python中的布爾值用兩個常量True和False所表示,一個布爾值要么True,要么False(注:這里的首字母都為大寫),常用在條件或循環中作為條件判斷。True和False分別對應數字中的1和0,可作為數字計算,但不提倡。
print(1 > 2) #False
print(1 < 2) #True
print(int(True)) #1
print(int(False)) #0
print(True + True) #2
print(True == 1) #True
print(False == 0) #True
布爾類型具體的“或”、“且”、“非”運算在稍后的 Python 運算符中進行詳細的闡明。
五、List 列表
列表(list)屬於一種有序的集合,可以隨時添加和刪除其中的元素。列表是 Python 中內置的一種數據類型,也是最常用的 Python 數據類型。列表的命名規則就是一個方括號([]),創建一個列表只要把逗號分隔的不同的數據項使用方括號括起來即可。列表中每個元素都分配有一個數字(從0開始),這個數字即為該元素的位置(或索引)也可以認為是該元素的下標,第一個索引是0,第二個索引是1,反過來最后一個索引是-1,依此類推。
在這里我們就簡單聲明一個班級名單列表 name 進行演示:
name = ["Madonna", "Cory", "Annie", "Nelly"]
注:列表中的數據項可以為任意數據類型。
現在我們已經弄清楚列表元素的具體位置了,也順便建立了一個簡單的列表,在下一篇文章內容中我們將會詳細的了解到列表到底有哪些方法。
》》》》》》》》文章鏈接:Python 列表和元組
六、Tuple 元組
元組和列表差不多,我們可以把元組看成是簡單的只讀列表,與“強大”的列表不同的是,元組創建后其中的元素就不能被修改了,它只有兩個內置的方法:index() 和 count() ,可以像列表那樣進行“查”(即進行切片)和count() 統計,不支持復雜的“增”、“刪”、“改”等功能。元組創建很簡單,只需要在小括號中添加元素,並使用逗號隔開即可。具體的操作請查看上文列表,這里就不進行詳細的說明,簡單演示實例如下:
name = ["Madonna", "Cory", ["Annie", "Nelly"], "Cory"] #創建一個班級名單列表 name
name_1 = ("Madonna", "Cory", ["Annie", "Nelly"], "Cory") #創建一個班級名單元組 name_1
print(name_1) #('Madonna', 'Cory', ['Annie', 'Nelly'], 'Cory')
print(name_1[1:3]) #('Cory', ['Annie', 'Nelly'])
print(name_1.index("Madonna")) #0
print(len(name_1)) #4
注:單個括號 () 即可表示元組,又可以表示數學公式中的小括號,打印時會產生歧義,所以當定義單個單獨的元素時,元素后必須要加一個逗號(,)隔開。
》》》》》》》》文章鏈接:Python 列表和元組
七、Dictionary 字典
字典(dict)是在列表后我們學到的第二種可變的容器模型,可以存儲任意類型的對象。字典,顧名思義就像是我們經常使用的新華字典或英語詞典一樣,具有極快的查找速度,可以幫助我們快速的查找到所需要的東西。在Python中,字典是以鍵值對(‘key’-'value')的形式表現的,每個鍵值對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中。
在這里需要注意的是:dict是無序的;跟多變的 value 不同的是 key 具有唯一性;key 的數據類型必須是固定的不可變的,如:數字、字符串、元組等,而 value 就沒有那么多的要求可以為任意的Python數據類型。演示實例如下:
math_score = {'Madonna': 89, 'Cory': 99, 'Annie': 65, 'Nelly': 89} #創建一個班級數學成績字典 math
print(math_score) #{'Madonna': 89, 'Cory': 99, 'Annie': 65, 'Nelly': 89}
demo_1 = {'Madonna': 89, 1: 'iennvv', 1.34: {'Madonna': 89}, ("ifne", "fjie"): [1, 2, 3]} print(demo_1) #{'Madonna': 89, 1: 'iennvv', 1.34: {'Madonna': 89}, ('ifne', 'fjie'): [1, 2, 3]}
demo_2 = {'Madonna': 89, {'iem': "ofem"}:99} #TypeError: unhashable type: 'dict'
demp_3 = {[1, 2, 3]: 45} #TypeError: unhashable type: 'list'
這時候我們已經知道如何創建一個正確的字典了,雖然這個創建的這個字典的長度有點慘不容睹,但是它已經屬於一個正常的字典了,可以實現索引字典該有的功能,在下一篇文章中我們從“增”“刪”“查”“改”四個方面進一步的接觸它。
》》》》》》》》文章鏈接:Python 字典與集合
八、Sets 集合
寫到這里終於快結束了,容我先歇口氣!在前面我們一口氣學完了列表、元組、字典,是不是感覺自己快炸了,方括號、括號、大括號什么的兩臉懵逼,不慫不怕,讓暴風雨來的更猛烈些吧!!!接下來進入集合的學習吧:
首先需要了解下如何去建立一個新的集合:第一種方法是我們可以通過大括號 {} 內加內容用逗號( , ) 隔開的方式直接創建一個集合;第二種可以使用 set() 方法將已有的列表(或元組)構建成一個無序的集合。
list_1 = [1, 3, 4, 5, 6, 66, 3, 6] #創建一個列表 list_1
print(type(list_1)) #<class 'list'>
set_1 = set(list_1) #把列表 list_1 轉換為集合 set_1
print(type(set_1)) #<class 'set'>
print(set_1) #{1, 2, 3, 4, 5, 6, 66, 22}
print(set((1, 2, 3, 4, 4))) #{1, 2, 3, 4} 由元組創建集合
set_2 = {1, 3, 3, 4, 4, 77} #直接創建一個集合 set_2
print(type(set_2)) #<class 'set'>
print(set_2) #{1, 3, 4, 5, 77}
啊!特么我的值怎么被吃了?怎么變短了那么多??系統還我的值啊!!!別激動,別激動,冷靜下。
冷靜下來后仔細觀察我們就會發現,被“吃”的值是列表(或元組)中重復的東西,這時候我們似乎發現了集合中一個不可告人的大秘密,它好像具有“去重”的功能,是不是很熟悉?對,你猜對了。這點集合跟字典類似,具有“天生去重”(自動把集合內部重復的部分刪除)的功能,我們可以理解集合是一個無序的、不重復的數據組合,但是集合與字典也存在明顯的不同,我們可以形象的把集合看成只有 key ,不具備存儲 value 的功能。

def __init__(self, seq=()): # known special case of set.__init__ """ set() -> new empty set object set(iterable) -> new set object Build an unordered collection of unique elements. # (copied from class doc) """ pass
注:集合和字典一樣是無序的(無法通過數字進行索引),而且內部的數據類型必須是固定的不可變的。
》》》》》》》》文章鏈接:Python 字典與集合
注:這幾篇文章本是一篇,由於字數太多嚴重影響閱讀體驗,所以就把內容進行了拆分,拆開的文章開始內容與本文相同,請見諒!!!