本文同樣從整體(菜鳥水平的整體視角)去思考python的資料型別。
和前面對python基本的運算子理解相似,首先我的思考路徑是——
(1)什麼是python內建的資料型別?
(2)六種內建的基本資料型別特點?
(3)為什麼是這六種?
——在後面幾篇中,將乙個個資料型別介紹,以便作為菜鳥的我能系統和紮實的掌握這六種資料型別。
在開始對我思考的三個問題回答之前,將long long ago,我學習計算機是對數字和資料兩個概念的理解(那時候或許年輕不懂事,但那時候的思考仍然有助於我理解,所以在此記錄一下而已)。
我當時的理解是——數字就是單純的數學符號,而資料不同,資料是用數學符號(即數字)為「基礎單詞」+相應的「語法規則」,以一定的邏輯組合起來的,可以表達出某種特定資訊的記錄依據——簡稱為資料,即以數字為依據來記錄資訊。
與英語的學習類似,在資料中,數字是記錄資訊所用的基本單詞,資料的組合方式就相當於英語中將單詞組合起來的語法。在大學的一門課程叫《資料結構》,是專門介紹如何將數字組合起來,比如串聯、樹形(二叉樹)、環形等——三種最基本的資料結構型別。
python的內建資料型別
與後面我們要學習的python內建函式一樣,所謂的內建,就是python在自己的「腦子」裡面已經「記住它們了」,只要你「說一聲」,python就能識別。而這裡的「說一聲」,就是你只要寫出相應的識別符號,python就知道是什麼資料型別,python應該怎麼儲存你書寫給它資料資訊,然後你要呼叫的時候,它需要怎麼樣從記憶體中把它「拽」出來(用拽這個詞,因為很多資料型別都是一串的)。
比如,我們在idle中輸入5,python看到後,知道這個符號表示的number型別,而python對這種型別的資料處理語法是——用某種hash演算法,把這個值代入算式,然後得到乙個位址,最後把這個位址返回給乙個變數。
再比如,初中初一一對一輔導我們在idle中輸入"tianweigen",python看到後,知道應該先將這一串東西的「串」乙個個取下來(即字元),然後將每個字元都存放到乙個空間裡面,並給每個取下來的字元乙個下標,從而記住每個字元,並在我們需要取出字串時候,python會按照下標運算,將每個字元從記憶體中再取出來,最後python再給這些字元「串」起來,又還原成原來的字串了。
剩餘幾種資料型別——()、、{}、,我認為無非就是python看到這些符號後,自己的「腦子」(python的執行環境)知道按照什麼樣的語法去分析和處理,就如同我們用腦子去學習英語,但我們看到 i know what she wants to do,就知道這是乙個賓語從句,python識別到這個中括號,就知道要給下標,並用自己「腦子」裡面python語言的發明者吉多「教給」它的演算法算出乙個相對可變的位址。
因此,所謂的內建型別,就是python語言的發明人吉多一開始就「植入」到python大腦的一套資料識別和處理語法規則(實際上就是演算法和訪問規則)。就如同小鴨子一旦出生,看到的第乙個能動的物體就會認為是它「媽媽」一樣,內建的基因決定的(這條基因就是演算法!)
同理,python的內建函式也是如此,就是python中已經「腦子」(內建的含義)中記住了這些函式的處理方式,你要做的就是在idle或其他程式設計環境中告訴它,你要調去哪個函式的名稱(識別符號),剩餘的python「知道」怎麼做了。
為什麼python要內建資料型別或函式
依然和我們前面所說的python運算子的理解一樣,這些能夠創造程式語言的技術大神們告訴你,他們只要用那幾種我們看起來非常基礎的±*/等運算子和這六種基礎的資料型別,你要的那些複雜功能都能給你實現。
就如同武林高手比武,問他要什麼**,人家只要基本的幾樣兵器足以搞定一切,也類似於乙個登封的木匠,會告訴你,只要鋸子+鑿子+刨子+尺子+墨斗即可將木頭造成你要的家具。
這些技術大神想告訴你,你看到的python裡面那麼多好用、方便的函式、類等功能,其實他們在「後面」你看不到的內部(內建),用的都是基本的加減乘除運算和基本的資料結構——其實就四種:順序、鏈式、環式、樹,就能搞定或創造出你要的東西。
其實,從前面我的理解,我認為像字串、列表、元組、集合、字典,都已經不是基本型別了。這些資料結構,應該是這些技術大佬通過運算子+資料結構的組合邏輯,將數字或字元(這才是最最基礎的),按照某種運算邏輯組合(邏輯有:串聯起來,環起來、樹狀等),並加入某種訪問位址的運算規則,而形成了字串、列表、元組、集合、字典等具有某種特點的「結構」型資料型別。
比如,元組的元素固定,或者集合的元素互異性,無非都是通過某種運算實現的,其底層操作的應該依然是數字和字元而已。
因此,到這裡,我應該也能回答,為什麼在python裡面,除了數字number型別外,其他5種——字串、列表、元組、集合、字典——都屬於序列型別。或許,是因為這5中型別都已經是通過某種資料結構邏輯組合而成的(有結構就有邏輯順序,有順序,應該就是序列了)。
對序列型別的資料,可以進行下標、擷取、in(成員運算)等,如下:
s = 「tianweigen」
for i in s:print(i)ti
anwe
igen
從上面就可以看出來,字串的基本元素還是字元,只不過加入了某種將這些字串聯起來的運算方式——下標運算。
而像number這種最基礎的(沒有結構的資料),就不會進行 in這種成員運算(in range()這種不算——因為range返回的是列表,還是序列型別)。
為什麼python要這6種型別
按照道理,對大神們來說,只要數字、字元2種就可以了(尤其對資料結構這門課程非常熟或專業的選手)。那為什麼python規定了6種呢?
這個和python的設計宗旨有關了,這是python在方便和簡潔做了選擇的結果。因為,少了,每次程式設計都要從最基本的2種型別資料去結合資料結構的知識,構建其他幾種功能的結構型別的資料,會非常不方便,而且一些像我這樣的菜鳥就根本辦不到啊。但,如果讓python這些技術大牛,把我們每次程式設計要用到的資料型別都編寫出來,或許他們能做到,但我們根本記不住,更不用去談靈活運用了。
這種簡化邏輯,就如同一位高手師傅告訴徒弟,不用學習老師傅的招式,因為招式是變化無窮的,要徒弟學習幾種「心法」或基本的武功底子,有了這些,自己的招式就會自然運用自如。
也如同我們學習某種舞蹈(如鬼步),你只要把步伐掌握了,手上的動作和腳下的各種變幻的舞姿,都是這些基本的演化。
鋼琴的學習不也是這樣的啊!你只要會那些琴鍵和音符,世界上的如何曲子都可以應對,甚至是創造出優美的旋律。
多一句,在以前我們學習計算機語言時,老師就說過,看起來紛繁複雜的電腦程式,拆解到本質,就3個「語法規則」,即計算機語言的邏輯——順序、條件(if)、迴圈(for)。也就是在最本質上,所有的計算機語言在邏輯結構上,就是順序、條件、迴圈。即使你現在學習的是高階語言,高階的底層也是這三種基本的邏輯實現的。
當時聽了,覺得這些計算機大神真是太牛了,用「三句話」把整個程式程式設計給概況完畢了。
現在,終於能體會到以前大咖老師說的,學好c、資料結構、計算機原理(彙編)、演算法,你才有可能成為計算機的真正大牛。因為,無論多麼高階的語言和程式,都可以以c為基礎,通過資料結構的思想,知道計算機的軟硬體和指令集,用優秀的演算法作為催動來實現。
python六大常用基本資料型別之字串
字面常量 有序序列 字串不可變 支援索引 sql sql 4 有趣 type sql 4 sql 4 o 報error tuple sql list sql for c ins ql 注 可迭代物件作用特別大 python包裝 join abcde return str join str range...
python六大標準資料型別的介紹
python是一門熱門的程式語言,也是一門熱門的指令碼語言,python中的六大標準型別分別為 數字 字串 列表 元組 集合 字典。接下來我為大家介紹一下這六大型別 1 數字 1 數字的型別 整型 int 浮點型 float 複數 complex 整型 通常稱為整數,是整數或者負數,不帶小數點。py...
六大資料型別 number
六大資料型別 intvar 123 二進位制整型 intvar 0b1111 八進位制整型 intvar 0o125 十六進製制整型 intvar 0x1010 表達方式1 floatvar 4.88 表達方式2 科學計數法 floatvar 6.7e4 e4代表向右移動4位 e 4代表向左移動四位...