總結2

總結2

基本數據類型及其常見操作和內置方法

布爾值bool

布爾值是表示事物真假兩個狀態的數據類型,它更偏向於最終做出決定的結果。

存儲形式:True表示真、對、可行;False表示假、錯、不可行

除了True/False表示布爾狀態,還有其他數據也帶有布爾屬性,又可以被認為是隱式布爾值。

整型int和浮點型float

整型和浮點型都是用來記錄數字的數據類型,簡單來說,整型記錄整數,浮點型記錄小數

類型轉換

用int()轉換其他數據變為整數,主要是對浮點型進行強制轉換

用float()轉換其他數據變為浮點數,可以識別字符串中一個小數點轉換為浮點小數。

進制轉換

對於整數來說,有二進制、八進制、十進制、十六進制之分(常見)

bin(),oct(),int(),hex()進行互相的轉換。

數字在顯示上採取前綴0b\0o\0x來代表2、8、16進制。

字符串str

用來記錄字符組合的數據類型,是不可變類型數據。

定義

s1 = 'my type is str'
字符串使用引號引起來,在python中可以是單雙引號,可以是連續三個單雙引號。

類型轉換

字符串可以將所有的數據類型變成字符串

字符串基礎操作

  1. 索引取值 — [數字]

  2. 切片操作 — [num1:num2:num3]

    • 可以通過指定頭尾索引的方式來切出一個新的字符串
    • num3默認為1不寫,可以通過它修改方向或步長
    • 還有分別省略數字1,2,3的寫法,都是有默認值的

    聯繫:在後續列表和元組的操作中,所有的索引取值和切片操作都一模一樣。

  3. 統計字符串的長度 — len()

    len()可以統計字符串、列表、字典、元組、集合的長度,對應各種數據類型最小元素的個數。

字符串之輸入輸出操作

  1. 輸入——input

    變量 = input(提示信息)
    # input會先向用戶打印一些提示信息,然後等待用戶輸入,輸入後得到字符串,可以賦值給變量。
    

    注意:input從用戶獲取的數據都是字符串類型的數據,我們可以從下面的知識了解

    python2與python3的input關鍵字區別

    python2的邏輯是要求用戶輸入相應數據類型的形式,並存儲為相應的類型。
    甚至在輸入不帶引號的aa時,會報錯,因為字符串應該是帶引號的。
    這十分不符合方便用戶的操作邏輯。
    而python2中也有與python3的input功能一樣的關鍵字raw_input
    
  2. 輸出——print()

    括號內可以放多個變量或者數據值,用逗號隔開

    當用print打印字符串時會自動換行,可以通過end=取消換行

  3. 格式化輸出——佔位符

    在python中,最基本輸出就是用print函數將數據以字符串形式打印出來。

    而字符串的格式化輸出則有佔位符內置函數format以及f方法變種

    %s%d,將這兩個符號放到字符串的某個位置,可以利用語法對其進行替換。

    在字符串或者字符串變量後面跟上%,再跟上一個數據值,那麼print就會輸出一個替換掉%s的字符串或者替換%d的數字,這就是佔位符的用法。佔位符有以下幾個用法:

    • 多個佔位符出現在一個字符串中

      多個佔位符必須要有對應個元素進行替換,多了不行,少了也不行。

    • 填充0至多少位

      %05d的意思是如果不足5位則填充至五位,且用0填充

    • %s常見類型數據都支持替換,%d只支持數字

  4. 格式化輸出——format()

    內置方法,字符串中含{},後續跟format(變量1,變量2……)

    • 等價於佔位符

    • 索引取值並支持反覆使用

    • 關鍵字取值

  5. 格式化輸出——f”

    優點在於,不需要後接format並且整理變量與數據,想用時去調用已有變量就可以了

    name = 'jason'
    age = 30
    f'{name} is {age} years old'  # 這個方法可以隨時引用前面賦值過的變量
    'jason is 30 years old'
    

字符串的內置方法

  1. 移除字符串首尾的字符(默認移除空格)—— strip()

  2. 按指定的字符分割字符串生成一個列表 —— split()

後續的內置方法使用頻率稍低一些

  1. 轉換大小寫 —— upper(),lower()
  2. 判斷大小寫 —— isupper(),islower()
  3. 判斷純數字 —— isdigit()
  4. 替換字符串中指定的內容 —— replace(舊內容,新內容)
  5. 字符串的拼接
    • 用運算符 # 不建議,因為底層效率較低
    • 內置方法 —— join(所有元素都是字符串的列表) # 這個拼接的效率高些
  6. 統計指定字符出現的次數 —— count(指定的字符)
  7. 判斷字符串的開頭和結尾 —— startswith(),endswith()

後續的使用頻率更低了

  1. 大小寫相關

    • 每個單詞首字母大寫 —— title()
    • 首個單詞首字母大寫 —— capitalize()
    • 轉換所有字母的大小寫 —— swapcase()
  2. 根據內容找索引 —— find()、index()

列表list

用來存儲多個數據值的數據類型,是可變類型的數據。

定義

l1 = []
l2 = [1, 2, 3]
中括號括起來,用逗號隔開所有元素

類型轉換

list(其他數據類型)
包括能夠被遍歷(能被for循環的)的類型,如元組、字符串、字典、集合

列表基礎操作

  1. 索引取值

  2. 切片操作

  3. 統計列表長度(元素個數)—— len()

  4. 對某個數據值修改 —— 根據索引賦值

列表內置方法

  1. 列表添加數據值

    • 尾部添加單個數據值 —— append(新元素值)

    • 任意位置添加數據值 —— insert(插入位置,新元素值)

    • 拼接/擴展列表 —— extend(尾部將拼接的列表)

  2. 刪除列表數據

    • 通用刪除關鍵字 —— del(索引找值)

    • 數據值查找刪除 —— remove(刪除內容)

    • 索引查找彈出 —— pop(刪除內容的索引)

      pop會返回刪除的內容

  3. 排序 —— sort(reverse = True)

    如果括號里沒寫reverse則默認升序排列,寫了則降序排列

  4. 統計某數據值出現次數 —— count()

  5. 顛倒列表的順序 —— reverse()

字典dict

字典相對於列表,是將索引的順序關係變成了鍵值對的搜索關係,鍵是對值的描述,每個鍵值對之間邏輯上不存在順序關係。

定義

變量名 = {鍵1:值1,鍵2:值2}
大括號括起來,鍵與值之間用冒號隔開,每個鍵值對之間用逗號隔開。

類型轉換

字典的類型轉換要求苛刻,一般不會使用

dict([['key1', 1], ['key2', 2]])  # 只能轉換多元素的類型,且每個元素中還要有兩個元素
# {'key1': 1, 'key2': 2}

常用操作與內置方法

  1. 按k取值

  2. 用內置方法get取值(推薦)—— get()

  3. 修改值的數據

    user_list['kaka'] = '110'  # 當鍵存在時,這一句就是修改對應的值
    
  4. 新增鍵值對

    user_list['lulu'] = '119'  # 當鍵不存在的時候,這一句就是新增鍵值對
    
  5. 刪除數據 —— del(按k找值)、pop(要彈出鍵值對的k)

    pop會返回刪除的鍵值對

  6. 統計字典中鍵值對個數 —— len()

  7. 字典三劍客

    • 拿到所有鍵 —— keys()

    • 拿到所有值 —— values() 也是用字典直接取到值的唯一方法

    • 拿到所有鍵值對 —— items()

補充說明(使用頻率低)

  1. 快速生成有默認值的字典 —— fromkeys(字典鍵的列表,默認值)

  2. 添加鍵值對 —— setdefault()

    當鍵存在時不操作,當鍵不存在時新增鍵值對

  3. 彈出鍵值對 —— popitem()

元組tuple

元組是可以容納多個元素值的數據類型,但是與列表不同,它每個索引對應的數據『不變』,是不可變類型的數據。

定義

t1 = (1, 2, 3, 4)
元組用小括號括起來,每個元素之間用逗號隔開

類型轉換

tuple()
# 可以轉換可遍歷的數據類型

常見操作

  1. 索引取值

  2. 切片操作

  3. 統計元組元素個數 —— len()

  4. 統計元組內某個數據值的出現次數 —— count()

  5. 得到元組指定數據值的索引值 —— index()

  6. 注意事項

    1.元組內如果只有一個元素,那麼逗號不能少
    2.元組內索引綁定內存地址不能修改
    3.元組不能新增或刪除類型
    

集合set

集合是容納不重複的多個元素的數據類型,有無序,無重的特點。

定義

s1 = set()  # 空集合
s2 = {1, 2 ,3}
集合用大括號括起來,每個元素之間用鍵值對隔開,注意與字典的區分。

集合的應用場景一般用於

  • 去重
  • 關係運算

去重(類型轉換)

t1 = (1, 2, 3, 2, 2, 3, 2, 1, 2)
s1 = set(t1)  # 集合不存在重複的元素的特點讓它具備去重的功能
t1 = tuple(s1)
t1  # (1, 2, 3)

關係運算

  • &and符表交集

  • -減號符表獨有

  • |管道符表並集

  • ^向上箭頭表各自獨有

  • ><大小於號判斷包含

python中的各種運算符

基本運算符

+-*/%取余 //取整 **冪運算

比較運算符

比較運算符會產出布爾類型的數據值,有:

>   <   >=     <=    ==等於     !=不等於      =是賦值符號不是比較運算符
print(2 >= 2)  # True

賦值運算符

除了常規的賦值運算符=,python還提供了很多便利的賦值語法。

  1. 鏈式賦值

    a = b = c =10   # 三個變量同時綁定了同一個值
    
  2. 交叉賦值

    m, n = n, m  # 即可交換兩個變量的值
    
  3. 解壓賦值

    t1 = (111, 222, 333)
    a, b, c = t1
    # 等同於
    a = t1[0]
    b = t1[1]
    c = t1[2]
    

    *變量名可以接收所有沒有被接收的變量並組合成列表

    l1 = [111, 222, 333, 444, 555]
    a, b, *c = l1
    print(a, b, c)  # 111 222 [333, 444, 555]
    # 不僅可以在最尾部接收還可以在中部
    a, b, *c, d = l1
    print(a, b, c, d)  # 111 222 [333, 444] 555
    

邏輯運算符

我們常聽到的與、或、非就是邏輯運算

Python中對應的關鍵字為and|or|not

  • and-與

    and兩側的兩個條件都成立則得出成立,即True屬性

  • or-或

    or兩側的兩個條件,只要一個是成立的,則成立,即True屬性

  • not-非

    非,即真假轉換,成立前面加個not就是不成立

and\or\not混用時的優先級順序,這個順序是存在的,但是並不需要記憶,我們應該用括號來劃分條件判斷的優先級,不然這樣的程序是難以識別的。

成員運算符

成員運算符in用於判斷一個數據值是否存在於字符串、元組、列表、集合和字典中。

  • 列表成員判斷

    最小的元素是列表中的元素,元素所含的字母不能做運算

    同樣也適用於元組和集合。

  • 字符串成員判斷

    字符串的最小元素是一個字,也可以是字的組合

  • 字典成員判斷

    字典只有鍵參與成員運算,其鍵對應的值不參與成員運算

身份運算符

身份運算符is判斷的是兩側的數據值是否存在一個地址中。

垃圾回收機制GC

無法通過變量找到的數據值,我們稱之為『垃圾』,而在python語言中,會自動的回收這些垃圾,而回收的邏輯原理有十二字真言:引用計數、標記清除、分代回收

引用計數

通過對數據值綁定變量的個數進行計量,新建立引用時+1,斷開引用時-1,當綁定變量個數為0時視為垃圾被回收。

標記清除

標記清除主要是用於解決循環引用的問題。循環引用無法把引用計數清0。

當內存佔用臨界時,程序會停止運行,掃描程序中的所有數據,把產生循環的數據打上標記,最後清除掉,名為標記清除。

分代回收

有策略的減少標記清除的頻率,使程序進行的流暢。策略是對多次都為被回收的數據值減少掃描。

流程控制

流程結構分為順序結構、分支結構、循環結構,它們能夠滿足大部分的邏輯判斷,對流程結構進行控制就是流程控制。順序結構就是依次執行每行代碼,無需特殊控制(底層已經寫好了)。

分支結構-if

分支結構的主要關鍵字是if,它控制的是當滿足某條件時,去執行某種操作,如果不滿足該條件,則不執行那種操作或者轉去做另外分支的操作。

if關鍵字

  • if後跟條件,再跟一個冒號
  • 如果if後的條件成立了,那麼執行縮進的代碼
  • 縮進的代碼的縮進位數必須相同

擴展:子代碼塊

  • 相同縮進的代碼塊代表同級代碼塊
  • 頂格的代碼都是頂級代碼
  • python縮進的規範是4個空格(pycharm中可以用tab鍵)
  • 不是所有的代碼都能擁有子代碼塊,if關鍵字是可以擁有子代碼塊的關鍵字之一

else關鍵字

  • else關鍵字和if同級,在if的下面
  • else有子代碼塊

else關鍵字的意思是:if條件沒有滿足時,則運行else下方的子代碼塊。

elif關鍵字

  • elif需要跟條件,並在執行到它時對條件進行判斷
  • elif與if和else同級,夾在兩者之間。
  • elif有子代碼塊

elif的意思是:當它上面所有的if、elif後面的條件都不滿足時,而它後面的條件滿足了,則執行它的子代碼塊。

循環結構-while

循環結構指不斷的重複執行某些代碼,這些代碼也許會有變量、狀態等變化,但是代碼的內容不變時,會用到循環結構。

while關鍵字

  • while後需要跟條件
  • while下需要跟子代碼塊,名為循環體

while的在滿足條件時執行子代碼塊,子代碼塊執行完畢後,會回到while後的條件判斷,如果還滿足則繼續從頭執行子代碼塊,如此循環往複。當條件判斷不滿足時會退出循環。

break關鍵字

  • break單獨一行
  • break只能在循環體中
  • 常配合分支結構使用

在循環體中碰到break後,會立即終止循環。與分支結構搭配使用即當滿足一定條件時可以終止循環

continue關鍵字

  • continue單獨一行
  • continue只能在循環體中
  • 常配合分支結構使用

在循環體中碰到continue後,會立即結束本輪的循環,返回while的條件判斷處決定是否進行下一輪循環。

循環結構-for

for關鍵字

  • for 變量名 in 遍歷的數據:
  • for關鍵字有子代碼塊

for循環會依次從遍歷的數據中取出數據,並存到變量中,然後執行子代碼塊,子代碼執行完後,進行下一次遍歷取值,再次執行循環體,如此循環往複。當取完遍曆數據中的元素值後結束循環。

for中break和continue

  • break用法不變,終止循環體
  • 碰到continue結束本輪循環,返回取值階段,取下一個值進行下一輪循環。

range語法

  • range(num1)

    生成一個長度為num1的列表,從0到num1-1

  • range(num1,num2)

    生成一個列表,頭一個元素為num1,最後一個元素為num2 -1

  • range(num1,num2,num3)

    生成一個列表,在以上基礎上,加入步長概念。

經常搭配for使用用於循環遍歷取值,或者單純的控制for循環的次數

ps:range不是真的生成一個列表,而是一個會不斷產生值的廠間,產生的順序與遍歷上述情形中的列表一致

字符編碼理論

字符編碼就是將字符與計算機語言底層的0101二進制組合對應起來。

字符顯示在電腦發展的過程中經歷了很大的變化,所以有很多不同的版本。

當我們使用某種編碼將字符進行編碼,而當解碼時發現亂碼,則大概率是字符編碼的版本不一致導致的,這種時候,就要用更換編碼版本嘗試解碼。