數據類型的查詢
html
String 字符串 ide
List 列表學習
Tuple 元組ui
Sets 集合
rest
當面對未知數據類型的數據時,咱們腦子裏應該有這麼一個問題:咱們怎樣才能查到未知數據的數據類型呢?code
這裏就讓我來簡單的回答下你的困惑,在Python中咱們能夠經過兩種內置函數來查詢對象數據類型:type() 和 isinstance() ,在此我截取了這兩個函數的部分源代碼進行參考:htm
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'>
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 是分母。分母是除數,分子是被除數。
在 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.
固然這只是簡單的狀況,若是字符串內部既包含 ' 又包含 " 怎麼辦?這時候咱們就須要引入轉義字符的概念了。這裏容我賣個關子就不具體陳述了,有關內容在之後的字符串專題中進行詳細的解讀。
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)屬於一種有序的集合,能夠隨時添加和刪除其中的元素。列表是 Python 中內置的一種數據類型,也是最常用的 Python 數據類型。列表的命名規則就是一個方括號([]),建立一個列表只要把逗號分隔的不一樣的數據項使用方括號括起來便可。列表中每一個元素都分配有一個數字(從0開始),這個數字即爲該元素的位置(或索引)也能夠認爲是該元素的下標,第一個索引是0,第二個索引是1,反過來最後一個索引是-1,依此類推。
在這裏咱們就簡單聲明一個班級名單列表 name 進行演示:
name = ["Madonna", "Cory", "Annie", "Nelly"]
注:列表中的數據項能夠爲任意數據類型。
如今咱們已經弄清楚列表元素的具體位置了,也順便創建了一個簡單的列表,在下一篇文章內容中咱們將會詳細的瞭解到列表到底有哪些方法。
》》》》》》》》文章連接:Python 列表和元組
元組和列表差很少,咱們能夠把元組當作是簡單的只讀列表,與「強大」的列表不一樣的是,元組建立後其中的元素就不能被修改了,它只有兩個內置的方法: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 列表和元組
字典(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 字典與集合
寫到這裏終於快結束了,容我先歇口氣!在前面咱們一口氣學完了列表、元組、字典,是否是感受本身快炸了,方括號、括號、大括號什麼的兩臉懵逼,不慫不怕,讓暴風雨來的更猛烈些吧!!!接下來進入集合的學習吧:
首先須要瞭解下如何去創建一個新的集合:第一種方法是咱們能夠經過大括號 {} 內加內容用逗號( , ) 隔開的方式直接建立一個集合;第二種可使用 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 字典與集合
注:這幾篇文章本是一篇,因爲字數太多嚴重影響閱讀體驗,因此就把內容進行了拆分,拆開的文章開始內容與本文相同,請見諒!!!