Python基礎知識
學習過程中記錄
目錄
1. 基本數據類型
1.1. 數字類型及操作
1.1.1. int 整數 可正可負 沒有取值范圍
- 四種進制:
- 十進制:1010,99,-219
- 二進制:(以0b或0B開頭) 0b010, -0B101
- 八進制:(以0o或者0O開頭) 0o123, -0O456
- 十六進制:(以0x或者0X開頭) 0x9a, -0X89
1.1.2. double 浮點數
-
取值范圍 -10308到10308,精度數量級10^-16
不確定尾數 -
round(x, d) 函數:
對x進行四舍五入,d是小數截取位數 -
科學計數法:
使用字母E或者e為冪的符號,以10為基數,格式如下:<a>e<b> 表示 a*10^b
1.1.3. 復數類型
- 復數是由一個實數和一個虛數組合構成,表示: x+yj
- 實部: 可用 z.real獲得實部
- 虛部: 可用 z.imag獲得虛部
1.1.4. global聲明使用全局變量
- 關鍵字global,后跟一個或多個變量名
global x
x = 2
1.1.5. 數值運算操作符
一元操作符:
- x + y: 相加
- x - y: 相減
- x * y: 相乘
- x / y: 相除
- x // y: 整除 結果為整數
- +x : x 本身
- -x : x 的負值
- x % y: 余數, 模運算 10%3結果為1
- x ** y: 冪運算,x的y次冪(當y為小數時,為開方運算)
二元操作符:
- x op= y
- x = x op y, 其中,op為二元操作符
- x += y, x -= y, x *= y, x /= y,
- x //= y, x %= y, x **= y
數據類型的關系:
整數 -> 浮點數 -> 復數
如果三種類型存在運算時,則會向右側轉型
1.2. 字符串類型及操作
字符串由一對單引號或者一對雙引號表示
1.2.1. python 對字符串進行編號
正向遞增序號 和 反向遞減序號
- 正向遞增從0開始
- 反向遞減從-1開始
- 使用方法為:
a = "我正在學習python" a[0] = "我" a[-1] = "n"
1.2.2. 字符串切片用法
使用[M:N:k]對字符串進行切片: M, N, K均可省略
- M:為起始位置(默認從0開始)
- N:為中止位置(默認到結尾)
- K:為步長(意義為間隔, 默認為1)
1.2.3. 字符串的特殊字符:
轉義符:
轉義符 | 含義 |
---|---|
\\ | 輸出為'' |
\n | 輸出為換行 |
\t | 輸出為制表符 |
\a | 響鈴 |
\b | 退格,刪除鍵 |
\' | 輸出"'",單引號 |
\" | 輸出'"',雙引號 |
\r | 表示回車 |
\v | 縱向位置添加制表符 為回車+制表符 |
\f | 換頁符 |
\000 | 表示空 |
\x.. | ..表示兩位,意思是用兩個16進制的數來表示一個字符 |
\... | 表示用三個8進制數表示一個字符 |
1.2.4. 字符串操作符
- x + y:
連接兩個字符串 - n * x 或 x * n:
復制n次字符串x - x in s :
如果 x 是 s 的子串,返回True, 否則返回False
1.2.5. 字符串處理函數
函數名稱及用法
名稱 | 用法 |
---|---|
len(x) | 長度, 返回字符串x的長度(中文字符仍為 一個文字為一個字符) |
str(x) | 任意類型x所對應的字符串形式 |
eval(x) | 將x字符串去除最外層分號,轉換為python可運行的命令 |
bin(x),oct(x),hex(x) | 將整數x轉化為, 二進制, 八進制, 十六進制並返回 |
chr(u) | u為Unicode編碼, 返回其對應的字符 |
ord(x) | x為字符, 返回其對應的Unicode編碼 |
1.2.6. 字符串處理方法
-
str.lower() / str.upper()
返回字符串的副本, 全部字符小寫/大寫 -
str.split(sep = None)
返回一個列表, 由str根據sep被分割的部分組成"A,B,C".split(",")
['A', 'B' ,'C']
-
str.count(sub)
返回字串sub在str中出現的次數 -
str.rplace(old, new)
返回字符串str副本, 所有old字串被替換為new -
str.center(width[,fillchar])
返回一個原字符串居中- width 總寬度
- fillchar (可選) 為填充字符 默認為空格
python".center(20,"=")
======python======
-
str.strip(chars)
從str中去掉在其左側和右側 chars 中列出的字符"= python=".strip(" =np")
"ytho"
-
str.join(iter)
在iter變量除元素為每一個元素后增加一個str",".join("12345")
1,2,3,4,5
1.2.7. 字符串格式化
print("今天是d%月d%日, 我跑了%f米"%(1,1,100.2))
printf(f"這是{n}")
-
format()
基本語法是通過 {} 和 : 來代替以前的 % 。
format 函數可以接受不限個參數,位置可以不按順序。 -
數字格式化見表格
(表格來源)數字 格式 輸出 描述 3.1415926 {:.2f} 3.14 保留小數點后兩位 3.1415926 {:+.2f} +3.14 帶符號保留小數點后兩位 -1 {:+.2f} -1.00 帶符號保留小數點后兩位 2.71828 {:.0f} 3 不帶小數 5 {:0>2d} 05 數字補零 (填充左邊, 寬度為2) 5 {:x<4d} 5xxx 數字補x (填充右邊, 寬度為4) 10 {:x<4d} 10xx 數字補x (填充右邊, 寬度為4) 1000000 {:,} 1,000,000 以逗號分隔的數字格式 0.25 {:.2%} 25.00% 百分比格式 1000000000 {:.2e} 1.00e+09 指數記法 13 {:>10d} 13 右對齊 (默認, 寬度為10) 13 {:<10d} 13 左對齊 (寬度為10) 13 {:^10d} 13 中間對齊 (寬度為10) 11 '{:b}'.format(11)
'{:d}'.format(11)
'{😮}'.format(11)
'{:x}'.format(11)
'{:#x}'.format(11)
'{:#X}'.format(11)1011
11
13
b
0xb
0XB進制
2. 分支結構
2.1. 單分支結構
if <條件> :
<語句塊>
2.2. 二分支結構
if <條件> :
<語句塊1>
else :
<語句塊2>
2.3. 多分支結構
if <條件1> :
<語句塊1>
elif <條件2> :
<語句塊2>
······
else :
<語句塊n>
2.4. 條件判斷:
2.4.1. 操作符
- <: 小於
- <=: 小於等於
- >: 大於
- >=: 大於等於
- == : 等於
- != : 不等於
2.4.2. 條件組合
- x and y :
兩個條件x和y的邏輯 與 - x or y :
兩個條件x和y的邏輯 或 - not x :
條件x的邏輯 非
2.5. 異常處理
try語句
try:
代碼塊(可能出現錯誤的語句)
except 異常類型 as 異常名:
代碼塊(出現錯誤以后的處理方式)
except 異常類型 as 異常名:
代碼塊(出現錯誤以后的處理方式)
except 異常類型 as 異常名:
代碼塊(出現錯誤以后的處理方式)
else:
代碼塊(沒出錯時要執行的語句)
finally:
代碼塊(該代碼塊總會執行)
注意:
- try是必須的 else語句有沒有都行
- except和finally至少有一個
- 可以將可能出錯的代碼放入到try語句,這樣如果代碼沒有錯誤,則會正常執行,如果出現錯誤,則會執行expect子句中的代碼,這樣我們就可以通過代碼來處理異常避免因為一個異常導致整個程序的終止
3. 循環結構
3.1. 遍歷循環
- for <循環變量> in <遍歷結構>:
<語句塊>
3.2. 無限循環
- while <條件>:
<語句塊>
3.3. 循環控制保留字
- break
結束整個循環
- continue
結束當前循環
3.4. 循環的的擴展
可以在循環后面加如下:
- else
//當循環沒有被break語句推出時,執行else語句塊
- for <循環變量> in <遍歷結構>:
<語句塊1>
else :
<語句塊2>
- while <條件>:
<語句塊1>
else :
<語句塊2>
4. 集合
- 集合是多個元素的無序組合
- 每個元素唯一,不存在相同元素
- 集合元素不可更改,不能是可變數據類型
4.1. 集合類型定義
- 集合用大括號{}表示,元素間用逗號隔開
- 建立集合類型用{} 或 set()
- 建立空集合類型, 必須使用set()
4.2. 集合操作符
- S|T:
返回一個新的集合,包括在集合S和T中的所有元素
- S-T:
返回一個新的集合,包括在集合S但不在T中的元素
- S&T:
返回一個新的集合,包括同時在集合S和T中的元素
- S^T:
返回一個新的集合,包括集合S和T中的非相同元素
- S <= T或 S < T:
返回True/False,判斷S和T的子集關系
- S >= T 或 S < T:
返回True/False,判斷S和T的包含關系
4.3. 增強操作符
-
增強操作符
增強 等價於 S |= T S = S\T S -= T S = S - T S &= T S = S&T S ^= T S = S^T
4.4. 集合處理方法
-
函數及其作用
函數 作用 S.add(x) 如果x不再集合S中,將x增加到S S.discard(x) 移除S中元素x,如果x不在集合S中,不報錯 S.remove(x) 移除S中元素x,如果x不在集合S中,產生KeyError異常 S.clear() 移除S中所有元素 S.pop() 隨機返回S的一個元素,更新S,若S為空產生KeyError異常 S.copy() 返回集合S的一個副本 len(S) 返回集合S的元素個數 x in S 判斷S中元素x, x在集合S中, 返回True, 否則返回False x not in S 判斷S中元素x, x不再集合S中,返回True, 否則返回False set(x) 將其他類型變量x轉變為集合類型
5. 序列
5.1. 序列類型定義
序列是一位元素向量,元素類型可以不同
類似數學元素序列: S1, S2,……,Sn-1
元素間由序號引導,通過下標訪問序列的特定元素
正向遞增序號
反向遞減序號
5.2. 序列操作符
-
操作符實例及作用:
實例 作用 x in s 查看x是否為s的元素,返回bool值 x not in s 查看x是否為s的元素,返回bool值 s + t 連接兩個序列 s*n *n*s 將序列復制n次 s[i] 索引, 返回s中的第i個元素 s[i, j, k] 切片,與字符串相同
5.3. 函數和方法
函數 | 作用 |
---|---|
len(s) | 返回序列的長度 |
min(s) | 返回序列s的最小元素 |
max(s) | 返回序列s的最大元素 |
s.index(x), s.index(x,i,j) | 返回序列s從i到j位置中第一次出現的元素x位置 |
s.count(x) | 返回序列s中出現x的總次數 |
5.4. 元組
-
元組的定義
元組是一種序列類型,一旦創建就不能被修改
使用小括號()或tuple()創建,元素間用逗號,分隔
可以使用或不使用小括號
5.5. 列表
5.5.1. 列表的定義
- 列表是一種序列類型, 創建后可以隨意被更改
- 使用方括號[]或者List()創建,元素間用逗號,分隔
- 列表中個元素類型可以不用,無長度限制
注意:列表賦值時,僅僅將一個列表名只想前一個列表而並沒有復制源列表本身
5.5.2. 列表操作函數及方法
函數 | 作用 |
---|---|
ls[i] = x | 替換列表ls第i元素為x |
ls[i:j:k] = lt | 用列表lt替換ls切片后所對應元素子列表 |
del ls[i] | 刪除列表ls中第i元素 |
del ls[i:j:k] | 刪除列表ls中第i到第j以k為步長的元素 |
ls += lt | 更新別來ls,將列表lt元素增加到列表ls中 |
ls *= n | 更新列表ls,其元素重復n次 |
ls.append(x) | 在列表最后增加一個元素x |
ls.clear() | 刪除列表ls中所有元素 |
ls.copy() | 生成一個新列表,復制ls中所有元素 |
ls.insert(i, x) | 在列表的第i個文職增加元素x |
ls.pop(i) | 將列表中第i文職元素取出並刪除該元素 |
ls.remove(x) | 將列表中出現的第一個元素x刪除 |
ls.reverse() | 將列表ls中元素反轉 |
5.6. 字典
5.7. 字典類型定義
- 鍵值對: 鍵是數據索引的擴展
- 字典是鍵值對的組合, 簡直對之間無序
- 采用大括號{}和dict()創建,鍵值對用冒號:表示
5.8. 字典類型操作函數和方法
函數 | 作用 |
---|---|
del d[k] | 刪除字典d中鍵k對應的數據 |
k in d | 判斷鍵k是否在字典d中,返回bool類型 |
d.keys() | 返回字典d中所有的鍵信息 |
d.values() | 返回字典d中所有的值的信息 |
d.items() | 返回字典d中所有的鍵值對信息 |
d.get(k,
|
鍵k存在,則返回相應值,不再則返回
|
d.pop(k,
|
鍵k存在,則返回相應值,不再則返回
|
d.popitem() | 隨機從字典d中取出一個鍵值對,以元組形式返回 |
d.clear() | 刪除所有的鍵值對 |
len(d) | 返回字典d中元素的個數 |
6. 函數
6.1. 函數的定義
- 函數是一段具有特定功能的、可重用的語句組
- 函數是一種功能的抽象,一般函數表達特定功能
- 兩個作用: 降低編程難度 和 代碼復用
def <函數名>(<參數(0個或多個)>): <函數體> return <返回值>
6.2. 函數參數個數
- 函數可以有參數,也可以沒有, 但必須保留括號
- 函數定義時可以為某些參數指定默認值,構成可選參數
(但是需要放在非可選參數后面)
def <函數名>(<非可選參數>, <可選參數>):
<代碼塊>
- 函數定義時可以設計可變數量參數,即不確定參數總數
def <函數名>(<參數>, *b):
6.3. 參數傳遞的兩種方式
- 按照位置傳遞
- 按照名稱方式傳遞
6.4. 函數的返回值
- return保留字用來傳遞返回值
- 函數可以有返回值,也可以沒有,可以有return,也可以沒有
- return 可以傳遞0個返回值,也可以傳遞任意多個返回值
6.5. lambda函數 (謹慎使用)
- lambda函數是一種匿名函數,即沒有名字的函數
- 使用lambda保留字定義,函數名是返回結果
- lambda函數勇於定義簡單是、能夠在一行內表示的函數
<函數名> = lambda<參數>:<表達式> 等價於 => def <函數名>(<參數>): <函數體> return <返回值>
7. 文件的數據格式化
7.1. 文件的類型
- 文件是數據的抽象和集合
- 文件是儲存在輔助器的數據序列
- 文件是數據儲存的一種形式
- 文件展現形態: 文本文件和二進制文件
7.1.1. 文本文件
- 有單一特定編碼組成的文件, 如UTF-8編碼
- 由於存在編碼,也被堪稱是存儲着的長字符串
7.1.2. 二進制文件
- 直接由比特0和1的組織結構,沒有同意字符編碼
- 一般存在二進制0和1的組織結構,即文件格式
7.2. 文件的打開及關閉
open("路徑", “打開模式”)
-
打開模式
標示 作用 'r' 只讀模式,默認值,如股票文件不存在,返回FileNotFoundError 'w' 覆蓋寫模式,文件不存在則創建,存在則完全覆蓋 'x' 創建寫模式,文件不存在則創建,存在則返回FileExistsError 'a' 追加寫模式,文件不存在則創建,存在則在文件最后追加內容 'b' 二進制文件模式 't' 文本模式,默認值 '+' 與r/w/x/a一同使用,在原功能基礎上增加同時讀寫功能 -
close()
<變量名>.close()
7.3. 文件內容的讀取
<f>.read(size = -1)
讀入全部內容, 如果給出參數,讀入前size長度
<f>.readline(size = -1)
讀入一行內容,如果給出參數,讀入改行前size長度
<f>.readlines(hint = -1)
讀入文件所有行, 以每行為元素形成列表如果給出參數,讀入前hint行
文件內容的寫入
<f>.write(s)
向文件寫入一個字符串或字節流<f>.writelines(lines)
將一個元素全為字符串的列標寫入文件<f>.seek(offset)
改變當前文件操作指針的位置,offset含義如下:- 0 文件開頭;
- 1 當前位置;
- 2 文件結尾;