總結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中可以是單雙引號,可以是連續三個單雙引號。
類型轉換
字符串可以將所有的數據類型變成字符串
字符串基礎操作
-
索引取值 — [數字]
-
切片操作 — [num1:num2:num3]
- 可以通過指定頭尾索引的方式來切出一個新的字符串
- num3默認為1不寫,可以通過它修改方向或步長
- 還有分別省略數字1,2,3的寫法,都是有默認值的
聯繫:在後續列表和元組的操作中,所有的索引取值和切片操作都一模一樣。
-
統計字符串的長度 — len()
len()可以統計字符串、列表、字典、元組、集合的長度,對應各種數據類型最小元素的個數。
字符串之輸入輸出操作
-
輸入——input
變量 = input(提示信息) # input會先向用戶打印一些提示信息,然後等待用戶輸入,輸入後得到字符串,可以賦值給變量。
注意:input從用戶獲取的數據都是字符串類型的數據,我們可以從下面的知識了解
python2與python3的input關鍵字區別
python2的邏輯是要求用戶輸入相應數據類型的形式,並存儲為相應的類型。 甚至在輸入不帶引號的aa時,會報錯,因為字符串應該是帶引號的。 這十分不符合方便用戶的操作邏輯。 而python2中也有與python3的input功能一樣的關鍵字raw_input
-
輸出——print()
括號內可以放多個變量或者數據值,用逗號隔開
當用print打印字符串時會自動換行,可以通過
end=
取消換行 -
格式化輸出——佔位符
在python中,最基本輸出就是用print函數將數據以字符串形式打印出來。
而字符串的格式化輸出則有佔位符和內置函數format以及f方法變種。
%s
與%d
,將這兩個符號放到字符串的某個位置,可以利用語法對其進行替換。在字符串或者字符串變量後面跟上
%
,再跟上一個數據值,那麼print就會輸出一個替換掉%s的字符串或者替換%d的數字,這就是佔位符的用法。佔位符有以下幾個用法:-
多個佔位符出現在一個字符串中
多個佔位符必須要有對應個元素進行替換,多了不行,少了也不行。
-
填充0至多少位
%05d
的意思是如果不足5位則填充至五位,且用0填充 -
%s
常見類型數據都支持替換,%d
只支持數字
-
-
格式化輸出——format()
內置方法,字符串中含{},後續跟format(變量1,變量2……)
-
等價於佔位符
-
索引取值並支持反覆使用
-
關鍵字取值
-
-
格式化輸出——f”
優點在於,不需要後接format並且整理變量與數據,想用時去調用已有變量就可以了
name = 'jason' age = 30 f'{name} is {age} years old' # 這個方法可以隨時引用前面賦值過的變量 'jason is 30 years old'
字符串的內置方法
-
移除字符串首尾的字符(默認移除空格)—— strip()
-
按指定的字符分割字符串生成一個列表 —— split()
後續的內置方法使用頻率稍低一些
- 轉換大小寫 —— upper(),lower()
- 判斷大小寫 —— isupper(),islower()
- 判斷純數字 —— isdigit()
- 替換字符串中指定的內容 —— replace(舊內容,新內容)
- 字符串的拼接
- 用運算符 # 不建議,因為底層效率較低
- 內置方法 —— join(所有元素都是字符串的列表) # 這個拼接的效率高些
- 統計指定字符出現的次數 —— count(指定的字符)
- 判斷字符串的開頭和結尾 —— startswith(),endswith()
後續的使用頻率更低了
-
大小寫相關
- 每個單詞首字母大寫 —— title()
- 首個單詞首字母大寫 —— capitalize()
- 轉換所有字母的大小寫 —— swapcase()
-
根據內容找索引 —— find()、index()
列表list
用來存儲多個數據值的數據類型,是可變類型的數據。
定義
l1 = []
l2 = [1, 2, 3]
中括號括起來,用逗號隔開所有元素
類型轉換
list(其他數據類型)
包括能夠被遍歷(能被for循環的)的類型,如元組、字符串、字典、集合
列表基礎操作
-
索引取值
-
切片操作
-
統計列表長度(元素個數)—— len()
-
對某個數據值修改 —— 根據索引賦值
列表內置方法
-
列表添加數據值
-
尾部添加單個數據值 —— append(新元素值)
-
任意位置添加數據值 —— insert(插入位置,新元素值)
-
拼接/擴展列表 —— extend(尾部將拼接的列表)
-
-
刪除列表數據
-
通用刪除關鍵字 —— del(索引找值)
-
數據值查找刪除 —— remove(刪除內容)
-
索引查找彈出 —— pop(刪除內容的索引)
pop會返回刪除的內容
-
-
排序 —— sort(reverse = True)
如果括號里沒寫reverse則默認升序排列,寫了則降序排列
-
統計某數據值出現次數 —— count()
-
顛倒列表的順序 —— reverse()
字典dict
字典相對於列表,是將索引的順序關係變成了鍵值對的搜索關係,鍵是對值的描述,每個鍵值對之間邏輯上不存在順序關係。
定義
變量名 = {鍵1:值1,鍵2:值2}
大括號括起來,鍵與值之間用冒號隔開,每個鍵值對之間用逗號隔開。
類型轉換
字典的類型轉換要求苛刻,一般不會使用
dict([['key1', 1], ['key2', 2]]) # 只能轉換多元素的類型,且每個元素中還要有兩個元素
# {'key1': 1, 'key2': 2}
常用操作與內置方法
-
按k取值
-
用內置方法get取值(推薦)—— get()
-
修改值的數據
user_list['kaka'] = '110' # 當鍵存在時,這一句就是修改對應的值
-
新增鍵值對
user_list['lulu'] = '119' # 當鍵不存在的時候,這一句就是新增鍵值對
-
刪除數據 —— del(按k找值)、pop(要彈出鍵值對的k)
pop會返回刪除的鍵值對
-
統計字典中鍵值對個數 —— len()
-
字典三劍客
-
拿到所有鍵 —— keys()
-
拿到所有值 —— values() 也是用字典直接取到值的唯一方法
-
拿到所有鍵值對 —— items()
-
補充說明(使用頻率低)
-
快速生成有默認值的字典 —— fromkeys(字典鍵的列表,默認值)
-
添加鍵值對 —— setdefault()
當鍵存在時不操作,當鍵不存在時新增鍵值對
-
彈出鍵值對 —— popitem()
元組tuple
元組是可以容納多個元素值的數據類型,但是與列表不同,它每個索引對應的數據『不變』,是不可變類型的數據。
定義
t1 = (1, 2, 3, 4)
元組用小括號括起來,每個元素之間用逗號隔開
類型轉換
tuple()
# 可以轉換可遍歷的數據類型
常見操作
-
索引取值
-
切片操作
-
統計元組元素個數 —— len()
-
統計元組內某個數據值的出現次數 —— count()
-
得到元組指定數據值的索引值 —— index()
-
注意事項
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還提供了很多便利的賦值語法。
-
鏈式賦值
a = b = c =10 # 三個變量同時綁定了同一個值
-
交叉賦值
m, n = n, m # 即可交換兩個變量的值
-
解壓賦值
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二進制組合對應起來。
字符顯示在電腦發展的過程中經歷了很大的變化,所以有很多不同的版本。
當我們使用某種編碼將字符進行編碼,而當解碼時發現亂碼,則大概率是字符編碼的版本不一致導致的,這種時候,就要用更換編碼版本嘗試解碼。