Python的基本數(shù)據(jù)類型
基本數(shù)據(jù)類型 – 數(shù)值
一 數(shù)值類型(不可變數(shù)據(jù)類型) :
整型(int) ?浮點型(float) ?復(fù)數(shù)類型(complex) ?à 數(shù)值運(yùn)算過程下,會自動從左到右進(jìn)行轉(zhuǎn)換
布爾類型(bool)? à 只有 True 和 False 兩種結(jié)果 ;
1 ? ? bool 繼承了 int 類型,因此可直接使用 bool 參與數(shù)學(xué)運(yùn)算 ,int(True) = 1 , int(False) = 0
2 ? ? 非零,非空為 真 , 零值,空值為假
PS –
type( )? ?函數(shù)可以參與 數(shù)據(jù)類型的查看
強(qiáng)制類型轉(zhuǎn)換 ?int? float ?complex
?????? 關(guān)于 float ?涉及的運(yùn)算精度問題 – 有效保證 小數(shù)點后16位
int(“整數(shù)字符串”,n)?
int(“111”) à 111 默認(rèn)轉(zhuǎn)化為十進(jìn)制數(shù) 111
int(“111”,2) à 7 指定參數(shù) 2 將其轉(zhuǎn)化為二進(jìn)制數(shù) 7
二 數(shù)值運(yùn)算
1 算數(shù)運(yùn)算 ?+ ?- ?* ?** ?/ ?// ?%?
Ps –
? ?“/” 真除法,以實際結(jié)果為準(zhǔn),保留至少一個小數(shù)位,最多保留16位
? “//”, “%”? 取整,取余 ,運(yùn)算結(jié)果的類型取決于操作數(shù)的類型
2 比較運(yùn)算 ?==? !=? >? <? >=? <=
Ps –
?????? 數(shù)值進(jìn)行比較時,以大小進(jìn)行比較 ; 字符進(jìn)行比較時,轉(zhuǎn)化為 ASCII對應(yīng)的值進(jìn)行比較
3 賦值運(yùn)算符 ?=? +=? -=? *=? /= ?**= ?%= ?//=
4 位運(yùn)算 & ?| ?~ ?^ ?<<? >>
Ps –
?????? 處理位運(yùn)算的過程中,需要首先將其轉(zhuǎn)換為 二進(jìn)制 模式進(jìn)行處理,然后按照對應(yīng)位以相應(yīng)的位運(yùn)算法則進(jìn)行處理
5 邏輯運(yùn)算 ?and? or? not
Ps –
?????? and? or? 參與的運(yùn)算 ,其結(jié)果為對象的值
?????? not???????? ?參與的運(yùn)算 ,其結(jié)果布爾類型(True,False)
6 成員運(yùn)算符 ?in , not in
Ps –
?????? 成員運(yùn)算符,對其結(jié)果的判定取決于兩個條件:值與類型
7 身份運(yùn)算符 ?is , not is
Ps –
?????? 用于比較兩個對象的內(nèi)存地址,可用于判定兩個變量是否應(yīng)用于一個相同的對象
三 ? 關(guān)于小數(shù)的精度處理
A 由于整數(shù)可以處理任意大類型的數(shù),故可以將某些小數(shù)進(jìn)行整數(shù)化(放大)
B 小數(shù)對象 – 使用 decimal 包下的 Decimal 函數(shù)創(chuàng)建
????? 看作固定精度的浮點數(shù),它有固定的位數(shù)和小數(shù),可以滿足要求的精度計算


?????? C 分?jǐn)?shù) – 使用 fractions 模塊下的 Fraction函數(shù)來創(chuàng)建
???????????????????? 使用分?jǐn)?shù)可以有效的避免浮點數(shù)誤差

PS –
Python 變量與對象
?????? X = 5
?????? Python 在執(zhí)行上述語句的過程中包含了3大步驟:
1 ? ? 創(chuàng)建表示 整數(shù)的對象 5 , 在 Python 中的數(shù)據(jù)都是以對象方式存在
2 ? ? 檢查變量 X 是否存在 , 不存在則創(chuàng)建它
3 ? ? 建立變量 X 到 5 之間的關(guān)系—變量 X 引用對象 5
Ps – Python 中使用變量時,必須理解下面幾點:
1?????? 變量在第一次賦值時被創(chuàng)建,再次出現(xiàn)時直接使用
2?????? 變量沒有數(shù)據(jù)類型的概念,數(shù)據(jù)類型屬于對象,類型決定了對象在內(nèi)存下的存儲模式
3???????? 變量引用了對象,當(dāng)在表達(dá)式中使用變量時,變量立即被其引用的對象替代,所以變量在使用前必須對其賦值
Ps--Python 對象的垃圾回收
?????? 當(dāng)對象沒有任何引用時,其占用的內(nèi)存空間會被自動回收
?????? 在 Python 內(nèi)部,Python 為每一個變量創(chuàng)建一個計數(shù)器,計數(shù)器記錄對象的引用次數(shù);若計數(shù)器為0,則對象被刪除,其占用的空間將會被回收
補(bǔ)充:
?????? 1 關(guān)于變量名的命名規(guī)則 –
? ? ? ? 前后有下劃線的變量,通常為系統(tǒng)變量 ;例如 _name_ , _doc_ …
????????????? 以一個下劃線開頭的變量,不能被 from … import * ?語句從模塊下導(dǎo)入 ;例如 _abc
???????????? ? 以兩個下劃線開頭無下劃線結(jié)尾的變量是類的本地變量 ;例如 __abc
?????? 2 關(guān)于賦值語句 –
?????? 一 序列賦值
1 ?“=” 左側(cè)是元組,列表表示的變量名,右側(cè)是元組,列表,字符串等
????? ? x,y = 1,2
???? ?? [x,y] = (10,20 )
???? ?? [x,y] = [20,”abc”]
????? ?? 2? 當(dāng)“=” 右側(cè)是字符串時,Python會將字符串分解為單個字符,依次賦值給各個變量
????? ? (x,y,z) = ‘a(chǎn)bc’
?????? ((x,y),z) = ‘a(chǎn)bc’
? 3? 可以在變量名之前合理使用 * 號,此時,不帶星號的變量匹配一個值,其余的都將賦給星號的變量
x,*y = ‘a(chǎn)bcd’
*x , y = ‘a(chǎn)bcd’
x,*y,z = ‘a(chǎn)bcd’
????????????? 二 ? 多目標(biāo)賦值
???????????????????? 使用 = ?實現(xiàn)連續(xù)賦值
???????????????????? a = b = c = 10
? ? ? ? ? ? ? 三 ?? 關(guān)于變量的共享引用
???????????????????? 可以借助 身份運(yùn)算符 is 來判斷兩個變量是否引用于同一個對象
???????????????????? x = 4
???????????????????? y = x
???????????????????? x = 7
????????????? ?? 思考 ?y 是否會受到 x 的影響
????????????? ?????? x = [4,5,6]
???????????????????? y = x
???????????????????? x[0] = 7
????????????? ?? 思考 ?y 是否會受到 x 的影響
基本數(shù)據(jù)類型 – 字符串
一 ?? 字符串的表示及其用法—
表示方法 :
1. 通過引號進(jìn)行表示 ?例如: ‘a(chǎn)’?? “a” 等
2. 利用內(nèi)置的 str 函數(shù) 進(jìn)行轉(zhuǎn)換 ?例如: str(123)
3. 使用帶有 r或R/b/B前綴的Raw字符串 例如: r’abc\n123’
4. 使用帶有 u或者U 前綴的 Unicode 字符串 例如: u’asdf’
思考題: 如何有效完成一個路徑字符串的輸入
? ? ? ? 假定字符串為 : C:\Users\Pluto
1? 借助轉(zhuǎn)義字符 \ 來實現(xiàn)對 “\”的處理
2? 采用使用帶有 r或R/b/B前綴的Raw字符串
例如 :
?????? ? “C:\\Users\\Pluto”
?????? ? r“C:\Users\Pluto”
PS – 轉(zhuǎn)移字符

??????? ???? Ps – bytes 字符串
??????????????????????????? 表達(dá)式 à b+傳統(tǒng)字符串 ?例如:b’a’ , b’123’ , b’Python code’ ,
??????????????????????????? 注意:
字符串中只包含 ASCII 碼字符
使用時,bytes字符串返回對應(yīng)的字符的 ASCII 碼
二 ?? 字符串的相關(guān)運(yùn)算
??????? 索引與切片
?????? ? 例如:給定一個字符串 String =? “987654321”
正向012345678
元素987654321
反向-9-8-7-6-5-4-3-2-1
1 利用索引進(jìn)行值的選擇,
例如 ??取出當(dāng)前元素 String 中的 6 ?,可以采用如下方式

?????? 2? 利用索引來完成切片選擇
?? ???? 例如: ?利用正向 取出一定范圍的元素 654 ,可以采用如下方式

????????????? 例如: ?利用反向 取出一定范圍的元素 456 ,可以采用如下方式

PS – 關(guān)于利用索引進(jìn)行切片的過程中,需要特別注意,在已經(jīng)給定的方向上,一般要滿足兩個條件,其一一致方向,其二起始值小于終止值
?????? 一個的格式如下:
???????????????????? String[ start : end : step ]? 其中 start 代表起始值 , end 代表終止值,step 可以約束方向以及數(shù)據(jù)間隔
?????? 例如

? ? ?? 3? 計算字符串的長度 -- ??len( ) 函數(shù)

? ? ?? 4? 關(guān)系判斷 --? in? , ?not ?in

? ? ?? 5? 字符串的連接
1?????? *? 完成的復(fù)制(只可以乘以一個 正整數(shù)類型)
2?????? +? 完成組合

6? 字符串的迭代 ?-- 可利用 for 循環(huán)迭代來處理序列類型的字符串
序列迭代的模式有兩種:一種是元素的迭代,一種是索引的迭代

? ? ?? 補(bǔ)充? --? 字符串的格式化輸出
?????? ?????? 一 ?以 % 占位符模式 ?
????????????? ?????? 譬如? print("The %s's price is %4.2f" %("apple",2.5))
???????????????????? ?????? 字符串之前的部分表示格式化表達(dá)式輸出的部分
???????????????????? ?????? 字符串之后的部分表示參數(shù)列表部分

???????????????????? PS - 格式化表達(dá)式的基本結(jié)構(gòu)
??????????????????????????? %[填充方式][對齊方式][數(shù)字寬度][小數(shù)點位數(shù)][格式化輸出類型]
???????????????????? 格式化控制符 --


????????????? 二 ?以 格式化輸出函數(shù) ?format
格式:<模板字符串>.format(<逗號分隔的參數(shù)>)
???????????????????? 格式化輸出 – 槽與槽位


槽內(nèi)部對格式化的配置方式

??????????????????????????? 例如:


???????????????????? 字符串的常用方法 ?-- "方法"特指<a>.<b>()風(fēng)格中的函數(shù)<b>( )
str.lower()或 str.upper()? 返回字符串的副本,全部字符小寫/大寫
????????????? ?????? str.split(sep=None)? 返回一個列表,由str根據(jù)sep被分隔的部分組成
????????????? ?????? str.count(sub)?????? 返回子串sub在str中出現(xiàn)的次數(shù)
???????????????????? str.replace(old, new)??? 返回字符串str副本,所有old子串被替換為new
???????????????????? str.center(width[,fillchar])? 字符串str根據(jù)寬度width居中,fillchar可選
???????????????????? str.strip(chars)????? 從str中去掉在其左側(cè)和右側(cè)chars中列出的字符
???????????????????? str.join(iter)?? 在iter變量除最后元素外每個元素后增加一個str

補(bǔ)充 --一些以函數(shù)形式提供的字符串處理功能

?????? 補(bǔ)充:Unicide編碼 -- 統(tǒng)一字符編碼,即覆蓋幾乎所有字符的編碼方式;從0到1114111 (0x10FFFF)空間,每個編碼對應(yīng)一個字符;Python字符串中每個字符都是Unicode編碼字符

練習(xí)題 :
1????????? 隨機(jī)生成 20 個數(shù) , 完成這20個數(shù)的 均值,方差以及標(biāo)準(zhǔn)差的計算
2????????? 完成任意給定的兩個數(shù)的最大公約數(shù)的計算
3????????? 試給出如下數(shù)列的前21項:
1? 1? 2? 3? 5? 8
4????????? 輸出九九乘法表
5????????? 輸出21層金字塔
6????????? 輸出 1-1000以內(nèi)的所有回文數(shù)