本文目錄一覽:
寫出python中6種數據類型?
Python中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以後該變量才會被創建。
Python3中有六個標準的數據類型:Number(數字)+String(字符串)+List(列表)+Tuple(元組)+Sets(集合)+Dictionary(字典)。
Number(數字)數字類型是顧名思義是用來存儲數值的,需要記住的是,有點和Java的字符串味道差不多,如果改變了數字數據類型的值,將重新分配內存空間。
可以使用del語句刪除一些數字對象的引用delvar1[,var2[,var3[….,varN]]]]。Python支持三種不同的數值類型:
1.整型(Int)-通常被稱為是整型或整數,是正或負整數,不帶小數點。
Python3整型是沒有限制大小的,可以當作Long類型使用,所以Python3沒有Python2的Long類型。
2.浮點型(float)-浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2=2.5×102=250)
3.復((complex))-複數由實數部分和虛數部分構成,可以用a+bj,或complex(a,b)表示,複數的實部a和虛部b都是浮點型。數字類型轉換1.int(x)將x轉換為一個整數。
4.complex(x,y)將x和y轉換到一個複數,實數部分為x,虛數部分為y。x和y是數字表達式。
Python3 & 基本數據類型(一)
Python提供的基本數據類型:數值(整型、浮點型、複數、布爾型等)、字符串、列表、元組、字典、集合等,將它們簡單分類如下:
通常被稱為整型,數值為正或者負,不帶小數點。
Python 3的整型可以當做Long類型使用,所以Python 3沒有
Python 2的Long類型。
Python 初始化的時候會自動建立一個小整數對象池,方便我們調用,避免後期重複生成!這是一個包含 262個指向整數對象的指針數組,範圍是 -5 到 256 。
Python的浮點數就是數學中的小數,類似C語言中的double。
浮點數 也就是小數,如 1.23 , 3.14 , -9.01 等等。但是對於很大或很小的浮點數,一般用科學計數法表示,把10用e替代, 1.23×10^9 就是 1.23e9 ,或者 12.3e8 , 0.000012 可以寫成1.2e-5 等等。
複數 由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示,複數的實部a和虛部b都是浮點。
對 與 錯 、 0 和 1 、 正 與 反 ,都是傳統意義上的布爾類型。
但在Python語言中,布爾類型只有兩個值, True 與 False 。請注意,是英文單詞的對與錯,並且首字母要大寫。
在Python中,0、0.0、-0.0、None、空字符串「」、空元組()、空列表[]、空字典{}都被當作False,還有自定義類型,如果實現了 nonzero ()或 len ()方法且方法返回0或False,則其實例也被當作False,其他對象均為True
布爾值還可以用and、or和not運算。
1)、and 運算是 與 運算,只有所有都為 True , and 運算的結果才是 True ;
2)、or 運算是 或 運算,只要其中有一個為 True , or 運算結果就是 True ;
3)、not 運算是 非 運算,它是單目運算符,把 True 變成 False,False 變成 True。
例如:
由以上案例可以看出,在做四則運算的時候,明顯把 True 看做 1 , False 看做 0 。
4)空值
空值不是布爾類型,只不過和布爾關係比較緊密。
空值是Python里一個特殊的值,用 None 表示(首字母大寫)。None不能理解為0,因為0是整數類型,而None是一個特殊的值。None也不是布爾類型,而是NoneType。
在某些特定的情況下,需要對數字的類型進行轉換。
Python提供了內置的數據類型轉換函數:
int(x) 將x轉換為一個整數。如果x是一個浮點數,則截取小數部分。
float(x) 將x轉換成一個浮點數。
complex(x) 將x轉換到一個複數,實數部分為 x,虛數部分為 0。
complex(x, y): 將 x 和 y 轉換到一個複數,實數部分為 x,虛數部分為 y。
Python字符串即可以用單引號也可以用雙引號括起來,甚至還可以用三引號括起來,字符串是以”或””括起來的任意文本。
例如:’abc’,”xyz”等等。請注意,”或””本身只是一種表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c這3個字符。如果’本身也是一個字符,那就可以用””括起來,比如”I’m OK”包含的字符是I,’,m,空格,O,K這6個字符。
字符串中包括特殊字符,可以用轉義字符\來標識
但是字符串裏面如果有很多字符都需要轉義,就需要加很多\,為了簡化,Python還允許用r”表示”內部的字符串默認不轉義
例如:
print r’\\\t\\’ #輸出:\\\t\\
字符串的一些常見操作
切⽚是指對操作的對象截取其中⼀部分的操作
語法:序列[開始位置下標:結束位置下標:步⻓]
a. 不包含結束位置下標對應的數據, 正負整數均可;
b. 步⻓是選取間隔,正負整數均可,默認步⻓為1。
find():檢測某個⼦串是否包含在這個字符串中,如果在返回這個⼦串開始的位置下標,否則則返回-1。
index():檢測某個⼦串是否包含在這個字符串中,如果在返回這個⼦串開始的位置下標,否則則報異常。
rfind(): 和find()功能相同,但查找⽅向為右側開始。
rindex():和index()功能相同,但查找⽅向為右側開始。
count():返回某個⼦串在字符串中出現的次數。
replace():替換
split():按照指定字符分割字符串。
join():⽤⼀個字符或⼦串合併字符串,即是將多個字符串合併為⼀個新的字符串。
capitalize():將字符串第⼀個字符轉換成⼤寫。
title():將字符串每個單詞⾸字⺟轉換成⼤寫。
lower():將字符串中⼤寫轉⼩寫。
upper():將字符串中⼩寫轉⼤寫。
lstrip():刪除字符串左側空⽩字符。
rstrip():刪除字符串右側空⽩字符。
strip():刪除字符串兩側空⽩字符。
ljust():返回⼀個原字符串左對⻬,並使⽤指定字符(默認空格)填充⾄對應⻓度 的新字符串。
rjust():返回⼀個原字符串右對⻬,並使⽤指定字符(默認空格)填充⾄對應⻓度 的新字符串,語法和
ljust()相同。
center():返回⼀個原字符串居中對⻬,並使⽤指定字符(默認空格)填充⾄對應⻓度 的新字符串,語
法和ljust()相同。
所謂判斷即是判斷真假,返回的結果是布爾型數據類型:True 或 False。
startswith():檢查字符串是否是以指定⼦串開頭,是則返回 True,否則返回 False。如果設置開
始和結束位置下標,則在指定範圍內檢查。
endswith()::檢查字符串是否是以指定⼦串結尾,是則返回 True,否則返回 False。如果設置開
始和結束位置下標,則在指定範圍內檢查。
isalpha():如果字符串⾄少有⼀個字符並且所有字符都是字⺟則返回 True, 否則返回 False。
isdigit():如果字符串只包含數字則返回 True 否則返回 False。
isalnum():如果字符串⾄少有⼀個字符並且所有字符都是字⺟或數字則返 回 True,否則返回
False。
怎麼用python表示正整數?
python整數的表示方法:
1、可以使用字符串str的isdigit方法判斷字符串是否是一個僅有數字組成,也就是整數。如果是整數退出while循環,否則繼續請求輸入。
2、也可以使用try-except語句。如果輸入的字符串是整數,那麼它可以用用int()函數,轉換為int類並退出循環,否則會出現ValueError,可以使用try-except語句捕獲ValueError,然後繼續請求輸入。
基本信息
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum於1990年代初設計,作為一門叫做ABC語言的替代品。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。
Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨着版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。
Python解釋器易於擴展,可以使用C或C++(或者其他可以通過C調用的語言)擴展新的功能和數據類型。Python也可用於可定製化軟件中的擴展程序語言。Python豐富的標準庫,提供了適用於各個主要系統平台的源碼或機器碼。
Python對象
眾所周知,Python是一門面向對象的語言,在Python無論是數值、字符串、函數亦或是類型、類,都是對象。
對象是在 堆 上分配的結構,我們定義的所有變量、函數等,都存儲於堆內存,而變量名、函數名則是一個存儲於 棧 中、指向堆中具體結構的引用。
要想深入學習Python,首先需要知道Python對象的定義。
我們通常說的Python都是指CPython,底層由C語言實現,源碼地址: cpython [GitHub]
Python對象的定義位於 Include/object.h ,是一個名為 PyObject 的結構體:
Python中的所有對象都繼承自PyObejct,PyObject包含一個用於垃圾回收的雙向鏈表,一個引用計數變量 ob_refcnt 和 一個類型對象指針 ob_type
從PyObejct的注釋中,我們可以看到這樣一句:每個指向 可變大小Python對象 的指針也可以轉換為 PyVarObject* (可變大小的Python對象會在下文中解釋)。 PyVarObejct 就是在PyObject的基礎上多了一個 ob_size 字段,用於存儲元素個數:
在PyObject結構中,還有一個類型對象指針 ob_type ,用於表示Python對象是什麼類型,定義Python對象類型的是一個 PyTypeObject 接口體
實際定義是位於 Include/cpython/object.h 的 _typeobject :
在這個類型對象中,不僅包含了對象的類型,還包含了如分配內存大小、對象標準操作等信息,主要分為:
以Python中的 int類型 為例,int類型對象的定義如下:
從PyObject的定義中我們知道,每個對象的 ob_type 都要指向一個具體的類型對象,比如一個數值型對象 100 ,它的ob_type會指向 int類型對象PyLong_Type 。
PyTypeObject結構體第一行是一個PyObject_VAR_HEAD宏,查看宏定義可知PyTypeObject是一個變長對象
也就是說,歸根結底 類型對象也是一個對象 ,也有ob_type屬性,那 PyLong_Type 的 ob_type 是什麼呢?
回到PyLong_Type的定義,第一行 PyVarObject_HEAD_INIT(PyType_Type, 0) ,查看對應的宏定義
由以上關係可以知道, PyVarObject_HEAD_INIT(PyType_Type, 0) = { { _PyObject_EXTRA_INIT 1, PyType_Type } 0} ,將其代入 PyObject_VAR_HEAD ,得到一個變長對象:
這樣看就很明確了,PyLong_Type的類型就是PyType_Typ,同理可知, Python類型對象的類型就是PyType_Type ,而 PyType_Type對象的類型是它本身
從上述內容中,我們知道了對象和對象類型的定義,那麼根據定義,對象可以有以下兩種分類
Python對象定義有 PyObject 和 PyVarObject ,因此,根據對象大小是否可變的區別,Python對象可以劃分為 可變對象(變長對象) 和 不可變對象(定長對象)
原本的對象a大小並沒有改變,只是s引用的對象改變了。這裡的對象a、對象b就是定長對象
可以看到,變量l仍然指向對象a,只是對象a的內容發生了改變,數據量變大了。這裡的對象a就是變長對象
由於存在以上特性,所以使用這兩種對象還會帶來一種區別:
聲明 s2 = s ,修改s的值: s = ‘new string’ ,s2的值不會一起改變,因為只是s指向了一個新的對象,s2指向的舊對象的值並沒有發生改變
聲明 l2 = l ,修改l的值: l.append(6) ,此時l2的值會一起改變,因為l和l2指向的是同一個對象,而該對象的內容被l修改了
此外,對於 字符串 對象,Python還有一套內存復用機制,如果兩個字符串變量值相同,那它們將共用同一個對象:
對於 數值型 對象,Python會默認創建0~2 8 以內的整數對象,也就是 0 ~ 256 之間的數值對象是共用的:
按照Python數據類型,對象可分為以下幾類:
Python創建對象有兩種方式,泛型API和和類型相關的API
這類API通常以 PyObject_xxx 的形式命名,可以應用在任意Python對象上,如:
使用 PyObjecg_New 創建一個數值型對象:
這類API通常只能作用於一種類型的對象上,如:
使用 PyLong_FromLong 創建一個數值型對象:
在我們使用Python聲明變量的時候,並不需要為變量指派類型,在給變量賦值的時候,可以賦值任意類型數據,如:
從Python對象的定義我們已經可以知曉造成這個特點的原因了,Python創建對象時,會分配內存進行初始化,然後Python內部通過 PyObject* 變量來維護這個對象,所以在Python內部各函數直接傳遞的都是一種泛型指針 PyObject* ,這個指針所指向的對象類型是不固定的,只能通過所指對象的 ob_type 屬性動態進行判斷,而Python正是通過 ob_type 實現了多態機制
Python在管理維護對象時,通過引用計數來判斷內存中的對象是否需要被銷毀,Python中所有事物都是對象,所有對象都有引用計數 ob_refcnt 。
當一個對象的引用計數減少到0之後,Python將會釋放該對象所佔用的內存和系統資源。
但這並不意味着最終一定會釋放內存空間,因為頻繁申請釋放內存會大大降低Python的執行效率,因此Python中採用了內存對象池的技術,是的對象釋放的空間會還給內存池,而不是直接釋放,後續需要申請空間時,優先從內存對象池中獲取。
原創文章,作者:WNY1U,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/128225.html