花了2萬多買的Python教程全套,現(xiàn)在分享給大家,入門到精通(Python全棧

# 轉(zhuǎn)為字符
## n \換行 n= newline
## \t :站位符 t=tap
## \r: 取代 r=replace
## \b: 退格 b=before
## \ :轉(zhuǎn)意字符
## r :還原轉(zhuǎn)意字符 r=return
# 二進(jìn)位 $ 2^8
- ASCII
- GBK
- UniCode chr(ob01100111001)
# 位運(yùn)算符
&, | ,<<,>>
# 運(yùn)算的優(yōu)先級

# 程序的流程控制
##程序的組織結(jié)果

## 順序結(jié)構(gòu)
## 選擇結(jié)構(gòu) if
### 單分支 if
### 雙分支 if else
### 多分支 if elif。。。。else
### 嵌套 if “ if else” else
bool( ) & type( )
[ ]=list() , ( )=tuple( )
## 條件 簡寫
```
print str(a+'大于等于’+str(b) if a>b)
```
### pass 語句(占位符)
### rang 語句
rang(n)
rang( star, stop)
rang(star, stop,step)
## 循環(huán)語句 while , for in
### while : while= if +1
#### 作業(yè) 1~100的偶數(shù)
## for 循環(huán) for in 遍歷 字符串,列表

···python
for _ in range(5):
? ? print('五次內(nèi)容')
```
###
## 流程控制語句 break, continue
### break 與if 使用
### continue 與if使用 結(jié)束當(dāng)前循環(huán)進(jìn)入下一個(gè)循環(huán)
#### 練習(xí)
#### 嵌套循環(huán)練習(xí) 輸出三行四列的矩形
```pythotn
for i in range(3):
for j in range(4):
print('*', end='\t')
print()#一定要注意print的位置\
```
#### 打印九九乘法表
```pythotn
for i in range(1,10):
for j in range(1,i+1): # 因?yàn)椋ǎ┦乔伴_后合
print(j,'*',i, '=',i*j,end='\t')
print()
```
### 二重循環(huán) 流程控制語句 break,continu

# 類型
## 列表

### 列表的生成式
[i for i in range (10)]

### 列表操作
#### 查詢,獲取單個(gè)元素 獲取多個(gè)元素 in /not in
#### 修改
- 增加 append() extend() insert() 切片
- 刪除 remove() pop() clear() del 切片[ star: end :sep]
- 改 索引 [ ] 切片 [ star: end :sep]


## 字典 ( 鍵:值 ) 對的集合 hash(key ) key只能是不可變序列:字符串
### 字典的創(chuàng)建 1 直接寫 2 用 key=變量

### 獲取字典的元素 1 print(字典[key ]) 2 字典.get('key')
### 字典的常用操作 1 查看 2遍歷

### 字典的特點(diǎn) key不能重復(fù),無序 key是字符串
### 字典的生成式 函數(shù) zip ()打包 list1為鍵 list2為值

可迭代對象:可以被遍歷的對象
### 總結(jié)

## 元組 :是一個(gè)不可變序列 不能 增 刪 改 操作

### 元組創(chuàng)建方式
#### 空列表 空字典 空元組 的創(chuàng)建 list()dict() tuple()為內(nèi)置函數(shù)也能創(chuàng)建空~~

### 元組的操作

#### 元組元素的獲取 1 索引 2 遍歷

## 集合 set{ } 沒有值的字典 也是hash() 函數(shù)
### 創(chuàng)建方式

### 相關(guān)操作
#### 集合元素的判斷操作·in或not in·集合元素的新增操作
#### 調(diào)用add()方法,一次添中一個(gè)元素
·調(diào)用update()方法至少添中一個(gè)元素
#### 集合元素的刪除操作
·調(diào)用remove)方法,一次刪除一個(gè)指定元素,如果指定的元素不存在拋出KeyError
·調(diào)用discard()方法,一次刪除一個(gè)指定元素,如果指定的元素不存在不拋界
·調(diào)用pop()方法,一次只刪除一個(gè)任意元素
·調(diào)用clear()方法,清空集合
### 集合直之間的關(guān)系
#### 兩個(gè)集合是否相等
·可以使用運(yùn)算符==或!=進(jìn)行判斷
####一個(gè)集合是否是另一個(gè)集合的子集 或超集
·可以調(diào)用方法issubset進(jìn)行判斷 B是A的子集
·可以調(diào)用方法issuperset進(jìn)行判斷A是B的超集
#### 兩個(gè)集合是否沒有交集
·可以調(diào)用方法isdisjoint進(jìn)行判斷
### 集合的數(shù)學(xué)操作
交集 s1. intersecton(s2) &
并集 s1. union(s2) +
差集 s1. difference(s2) -
對稱差集 并集 s1.symmertric_difference(s2)
## 字符串 不可變
### 字符串的對齊

### 字符串的比較 ord()得到ud值,chr()用值得到 字

### 字符串的創(chuàng)建
- fromat 方法 ’{}{}'format(a,b)
- 占位符
- f‘
- %s , %d 。%( s,d)
- {0} {0} format( a,b )
- f ` {a}

#### % 可以表寬帶,精度

###字符串的編碼 .encode(encoding='gbk') 解碼 .decode(encoding='gbk')

### 總結(jié)

# 函數(shù) input print() type()。。。
## 創(chuàng)建 def fun() return
def 函數(shù)名(收入?yún)?shù)):
函數(shù)體
return(xx)

## 參數(shù)調(diào)用
- 按位置傳遞
- 按名稱調(diào)用傳遞
###練習(xí) 可變對象
- 實(shí)際參數(shù)與形式參數(shù)可以不一致:根據(jù)位置傳參
- 調(diào)用過程中,不可變對象如:字符串,不會受函數(shù)影響,可變對象 如 列表 會受函數(shù)影響
## 函數(shù)的返回值 return 函數(shù)是否要用return根據(jù)情況而定
- 0的布爾值為false ,其它數(shù)的布爾值是true
- 返回值如果是一個(gè)返回原對象的類型,如果是兩個(gè)返回的是元組
## 函數(shù)參數(shù)定義 定義值 稱為默認(rèn)值

### 可變的位置參數(shù)
- def fun (* a) ,字形參 def fun(**a) 只能有一個(gè)
- 但可以 def fun (*a,**a)
### 參數(shù)總結(jié)
## 變量的作用域 局部作用 全局作用 global 局部=全局作用
## 遞歸函數(shù) 包含自己的函數(shù)

- 遞歸調(diào)用與遞歸中止條件 if else
### 練習(xí) 裴波數(shù)列 n= (n-2)+(n-1)
## 函數(shù)總結(jié)

# 程序bug
## 由來 分類 debug
### SyntaxError 語法錯(cuò)誤
- input() 的所有內(nèi)容為字符串
- 變量沒賦值
- 一個(gè)等號叫賦值 兩個(gè)等號才叫比較

### index Error 索引越界錯(cuò)誤 not defined ?.方法沒有被定義
### 思路不清
在各部位打印 將沒用的代碼注釋掉
print(item)
print('--------------')
分開看的比較清楚
### 由于意外 try except else
try except else finally
## 常見異常類型異常類型
ZeroDivisionError :除( 或取模) 零( 所有數(shù)據(jù)類型)
lndexError:序列中沒有此索引(index)
KeyError:映射中沒有這個(gè)鍵
NameError:未聲明/ 初始化對象( 沒有屬性)
SyntaxError:Python 語法錯(cuò)誤
ValueError:傳入無效的參數(shù)描述






# 編程思想
面向過程 面向?qū)ο?相輔相成
## 編程界的兩大陣營
面向過程:事物比較簡單, 可以用線性的思維去解決
面向?qū)ο?事物比較復(fù)雜, 使用簡單的線性思維無法解決
共同點(diǎn) 面向過程和面向?qū)ο蠖际墙鉀Q實(shí)際問題的一種思維方式
二者相輔相成, 并不是對立的
解決復(fù)雜問題, 通過面向?qū)ο蠓绞奖阌谖覀儚暮暧^上把握事物之間復(fù)雜的關(guān)系、方便我們分析
整個(gè)系統(tǒng); 具體到微觀操作, 仍然使用面向過程方式來處理
# 類與對象
## 類的 "定創(chuàng)建"
類名 單詞首字母大寫
?對象三要素 ?id ?class ?value 類也是對象
1. 實(shí)例方法 def 方法(self)
2. 靜態(tài)方法 @staticmethod def 方法()
3. 類方法 ?@classmethod ? def 方法(cls)
- ?107.定義Python中的類 P108 - 01:34?
## 類的 "用創(chuàng)建" (實(shí)例化)變量=類名()
- 類 內(nèi) 方法(功能) 的 調(diào)用
?1. 對象. 方法名()
?2. 類名.方法名(對象)
- 一個(gè)類可以創(chuàng)建多個(gè)對象
1. 類屬性: 類中方法外的變量稱為類屬性, 被該類的所有對象所共享
2. 類方法: 使用@classmethod 修飾的方法, 使用類名直接訪問的方法
3. 靜態(tài)方法. 使用@staticmethod 修飾的主法, 使用類名直接訪問的方法
## 動(dòng)態(tài)綁定屬性和方法
- 動(dòng)態(tài)綁定屬性
實(shí)例名.屬性=對象 直接綁定 不會改變用此類的別的類 就叫動(dòng)態(tài)綁定
- 動(dòng)態(tài)綁定 “方法”
實(shí)例名. name=函數(shù) 直接綁定 不會改變用此類的別的類 這也是動(dòng)態(tài)綁定
|封裝| 繼承|方法重寫|object 類| 多態(tài)|特殊方法和特殊屬性|
| --- | --- | --- | --- | --- | --- |
|提高安全性|
## 面向?qū)ο蟮娜筇卣?/strong>
## 封裝. 提高程序的安全性
1. 將數(shù)據(jù)( 屬性) 和行為( 方法) 包裝到類對象中。在方法內(nèi)部對屬性進(jìn)行操作, 在類對象的外部調(diào)用方法。這樣, 無需關(guān)心方法內(nèi)部的具體實(shí)現(xiàn)細(xì)節(jié), 從而隔離了復(fù)雜度。
2. 在Python 中沒有專門的修飾符用于屬性的私有, 如果該屬性不希望在類對象外部被
訪問, 前邊使用兩個(gè)"-"
##?繼承. 提高代碼的復(fù)用性
語法格式:?class 孑類類名( 父類1 , 父類2 一)
1. 如果一個(gè)類沒有繼承任何類, 則默認(rèn)繼承object Python 支持多繼承
2. 定義子類時(shí), 必須在其構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)
super().方法()
### 方法重寫
也可以def 方法
super().方法
self().方法
這樣 子類的方法就加在了父類的后面
### object 類
dir()內(nèi)值函數(shù)可查 屬性 方法
__str__方法:用于返回對象的描述(內(nèi)存地址
## 多態(tài)
?簡單地說, 多態(tài)就是“ 具有多種形態(tài)" 它指的是: 即便不知道一個(gè)變量所引用的
對象到底是什么類型, 仍然可以通過這個(gè)變量調(diào)用方法, 在運(yùn)行過程中根據(jù)變
量所引用對象的類型, 動(dòng)態(tài)決定調(diào)用哪個(gè)對象中的方法。
特殊屬性 和方法
__dict__獲得類對象或?qū)嵗龑ο笏壎ǖ乃袑傩院头椒ǖ淖值?/p>
__len__通過重寫len方法, 讓內(nèi)置函數(shù)len() 的參數(shù)可以是自定義類型
__add__通過重寫add?方法, 可使用自定義對象具有“ + ” 功能

__init__用于創(chuàng)建對象init 對創(chuàng)建的對象進(jìn)行初始化
__new__創(chuàng)建對象
class 對象 的 type
base:對象父類的的個(gè)數(shù) 與名稱
mro: 類的層次列表 有幾個(gè)子類
## 類的淺拷貝與深拷貝
* ?變量的賦值操作
只是形成兩個(gè)變量, 實(shí)際上還是指向同一個(gè)對象
* ?淺拷貝
?Python 拷貝一般都是淺拷貝, 拷貝時(shí), 對象包含的子對象內(nèi)容不拷貝,
因此, 源對象與拷貝對象會引用同一個(gè)子對象
* 深拷貝
?使用copy 模塊的deepcopy 函數(shù), 遞歸拷貝對象中包含的子對象
源對象和拷貝對象所有的子對象也不相同
# 模塊
一個(gè).py文件就是一個(gè)模塊
## 使用模塊的好處
· 方便其它程序和腳本的導(dǎo)入并使用
· 避免函數(shù)名和變量名沖突
· 提高代碼的可維護(hù)性
. 提高代碼的可重用性
## 導(dǎo)入模塊
import 模塊名稱[a s 別名]
from 模塊名稱 import 函數(shù)/ 變量/ 類
(print(dir(模塊))查看模塊的 方法 (函數(shù))

方法:目錄下右鍵 選 將目錄記為 選 根目錄
以主程序形式運(yùn)行
## 以主程序形式運(yùn)行
· 在每個(gè)模塊的定義中都包括一個(gè)記錄模塊名稱的變量一name 一程序可以檢查該變量, 以確定他們在哪個(gè)模塊中執(zhí)行。如果一個(gè)模塊不是被導(dǎo)入到其它程序中執(zhí)行, 那么它可能在解釋器的頂級模塊中執(zhí)行。頂級模
塊的name 變量的值為main
main 語句:
if?__name__ ='__main__':
程序()
# Python中的包
- 包是一個(gè)分層次的目錄結(jié)構(gòu), 它將一組功能相近的模塊組織在一個(gè)目錄下
- 作用:
. 代碼規(guī)范
· 避免模塊名稱沖突
- 包與目錄的區(qū)別
· 包含—inlt— py 文件的目錄稱為包
.目錄里通常不包含一init 一py 文件
- 包的導(dǎo)入
import 包名. 模塊名
## 包的創(chuàng)建
## 包的導(dǎo)入
from 包 import 模塊.類 函數(shù) as 名
也可以 import 包
import 模塊
# Python 中常用的內(nèi)置模塊
* sys: 與python解釋器及其環(huán)境操作相關(guān)的標(biāo)準(zhǔn)庫
* time: ?提供與時(shí)間相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫
* os: 提供了訪問操作系統(tǒng)服務(wù)功能的標(biāo)準(zhǔn)庫
* calendar: 提供與日期相關(guān)的各種函數(shù)的標(biāo)準(zhǔn)庫
* urllib: 用于讀取來自網(wǎng)上( 服務(wù)器) 的數(shù)據(jù)標(biāo)準(zhǔn)庫
* json: 用于使用JSON 序列化和反序列化對象
* re: 用于在字符串中執(zhí)行正則表達(dá)式匹配和替換
* math: 提供標(biāo)準(zhǔn)算術(shù)運(yùn)算函數(shù)的標(biāo)準(zhǔn)庫
* decimal: 用于進(jìn)行精確控制運(yùn)算精度、有效數(shù)位和四舍五入操作的十進(jìn)制運(yùn)算
* logging: 提供了靈活的記錄事件、錯(cuò)誤、警告和調(diào)試信息等目志信息的功能
## 第三方模塊的安裝
pip install 模塊 (在線安裝方式)
### 練習(xí) 安裝使用 schedule 模塊

## 常見的字符編碼格式
. Python 的解釋器使用的是UniCode ( 內(nèi)存)
. py 文件在磁盤上使用UTF-8 存儲( 外存)
? ? ASCII: 7 位表示1 個(gè)字符, 最高位為0 , 只能表示128 個(gè)字符
? ? ISO8859: ?8 位表示1 個(gè)字符, 能表示256 個(gè)字符, 兼容ASCII
? ? GB2312 ?GBK GB18030:中文編碼 兼容 ISO8859
? ? UTF-8: UTF-8是Unicode 的實(shí)現(xiàn)變長編碼, 1~4 個(gè)字節(jié)表示1 個(gè)字符, 英文1 個(gè)字節(jié), 漢字3 個(gè)字節(jié)。
命令 encoding xxx 可以修改文件格式
# 文件讀寫原理 (IO 操作)

``` file= open('a.txt','r')``
## 常用的文件打開模式
文件的類型: 按文件中數(shù)據(jù)的組織形式, 文件分為以下兩大類
* 文本文件: 存儲的是普通“ 字符" 文本, 默認(rèn)為unicode 字符集, 可以使用記本事程序打開
* 二進(jìn)制文件: 把數(shù)據(jù)內(nèi)容用“ 字節(jié)" 進(jìn)行存儲, 無法用記事本打開, 必須使用專用的軟
件打開, 舉例mp3 音頻文件,jpg 圖片doc 文檔等
### 打開模式
r: 以只讀模式打開文件, 文件的指針將會放在文件的開頭
w: 以只寫模式打開文件, 如果文件不存在則創(chuàng)建, 如果文件存在, 則覆蓋原有內(nèi)容, 文件指針在文件的
開頭
a: 以追加模式打開文件, 如果文件不存在則創(chuàng)建, 文件指針在文件開頭, 如果文件存在, 則在文件末尾
追加內(nèi)容, 文件指針在原文件末尾
b: 以二進(jìn)制方式打開文件, 不能單獨(dú)使用, 需要與共它模式一起使用, rb , 或者wb
+: 以讀寫方式打開文件, 不能單獨(dú)使用, 需要與其它模式一起使用, a+
### 文件對象的常用方法
read readline readlines writ .writelines()seek tell frush close
read(size): 從文件中讀取size個(gè)字節(jié)或字符的內(nèi)容返回。若省略[ size ?] ,則讀取到文件末尾, 即一次讀取文件所有內(nèi)容
readline ()從文本文件中讀取一行內(nèi)容
readlines(): 把文本文件中每一行都作為獨(dú)立的字符串對象, 并將這些對象放入列表返回
write (str): 將字符串str 內(nèi)容與入文件
writelines (s_list): 將字符串列表s 一list 與入文木文件, 不添加換行符
seek (offset [ , whence): 把文件指針移動(dòng)到新的位置, offset 表示相對于whence 的位置:ffset 為正往結(jié)束方向移動(dòng), 為負(fù)往開始方向移動(dòng)
whence 不同的值代表不同含義:
0 : 從文件頭開始計(jì)算( 默認(rèn)值)
1 : 從當(dāng)前位置開始計(jì)算
2 : 從文件尾開始計(jì)算
tell():返回文件指針的當(dāng)前位置
flush():把緩沖區(qū)的內(nèi)容寫入文件, 但不關(guān)閉文件
close (): 把緩沖區(qū)的內(nèi)容寫入文件, 同時(shí)關(guān)閉文件, 釋放文件對象相關(guān)資源
### with句 (上下文管理器)
1. 可以自動(dòng)管理上下文資源, 不論什么原因跳出with 塊,都能確保文件正確的關(guān)閉, 以此來達(dá)到釋放資源的目的。
- 原理:
## 目錄 操作
· os 模塊是Py on 內(nèi)置的與操作系統(tǒng)功能和文件系統(tǒng)相關(guān)的模塊,
該模塊中的讠口句的執(zhí)行結(jié)果通常與操作系統(tǒng)有關(guān), 在不同的操
作系統(tǒng)上運(yùn)行, 得到的結(jié)果可能不一樣。
.os 模塊與os.path
### os 模塊用于對目錄或文件進(jìn)行操作
os.system(應(yīng)用)os.gecwd() listdir(path) mkdir(path,[mode]) rmdir(path) removedirs(path1/path2) chdir(path)
#### OS
* system():打開應(yīng)用
* getcwd (): 返回當(dāng)前的工作目錄
* mkdir (path , [mode]): 創(chuàng)建目錄
* makedirs (path1/path2. . . [ , mode)): 創(chuàng)建多級目錄
* rmdir (path): 刪除目錄
* removedirs (path 1 /path2.....):
* 刪除多級目錄 chdir (path): 將path 設(shè)置為當(dāng)前主作目
#### os.path操作目錄 相關(guān)函數(shù)
os.path.函數(shù)()
* abspath (path): 用于獲取文件或目錄的絕對路徑
* exists (path): 用于判斷文件或目錄是否存在, 如果存在返回True ,否則返回Fa1se
* join (path , name): 將目錄與目錄或者文件名拼接起來
* splitext(): 分離文件名和擴(kuò)展名
* basename (path): 從一個(gè)目錄中提取文件名
* dirname (path): 從一個(gè)路徑中提取文件路徑, 不包括文件名
* isdir (path): 用于判斷是否為路徑
#### 練習(xí)

# 學(xué)生管理系統(tǒng)
