2020-10-14

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ù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容