总复习(一)
目錄
- 0524總復習
- 計算機之編程
- 什么是編程語言
- 什么是編程
- 為什么要編程
- 計算機組成原理
- 計算機五大組成
- CPU
- 內存
- 外存
- 輸入設備
- 輸出設備
- I/O設備
- 32位和64位
- 32位
- 64位
- 多核CPU
- 硬盤工作原理
- 機械硬盤工作原理
- 固態硬盤工作原理
- 計算機五大組成
- 計算機操作系統
- 文件是什么?
- 應用程序是什么?
- 操作系統能干什么?
- 計算機三大組成?
- 應用程序
- 操作系統
- 硬件
- 應用程序的啟動和操作系統的啟動?
- 編程語言分類
- 機器語言
- 匯編語言
- 高級語言
- 解釋型語言
- 編譯型語言
- 執行Python程序的兩種方式
- 交互式
- 命令行式
- 執行Python程序的兩種IDE
- Pycharm
- Jupyter
- 變量
- 什么是變量?
- 變量的組成?
- 變量名的定義規范
- 定義變量的兩種方式
- 常量
- 注釋
- 單行注釋
- 多行注釋
- 引用計數
- 垃圾回收機制
- 小整數池
- 與用戶交互
- input
- 格式化輸出
- 占位符
- format格式化
- f-string格式化
- 基本運算符
- 算術運算符
- 邏輯運算符
- 比較運算符
- 賦值運算符
- 身份運算符
- 運算符優先級(略)
- 鏈式賦值
- 交叉賦值
- 解壓縮
- 流程控制
- 流程控制之if判斷
- if
- if...else
- if...elif....elif...else
- 流程控制之while循環
- while
- while + break
- while + continue
- while + else
- 流程控制之for循環
- for
- for + break
- for + continue
- for + else
- 流程控制之if判斷
- 數據類型內置方法
- 數字類型內置方法
- 整型
- 浮點型
- 字符串類型內置方法
- 列表類型內置方法
- 元祖類型內置方法
- 字典類型內置方法
- 集合類型內置方法
- 布爾類型
- 數據類型總結
- 拷貝
- 淺拷貝
- 深拷貝
- 數字類型內置方法
- 0531總復習
- 數據類型內置方法
- 整形類型內置方法
- 浮點型類型內置方法
- 字符串類型內置方法
- 優先掌握
- 需要掌握
- 了解
- 列表類型內置方法
- 優先掌握
- 需要掌握
- 元組類型內置方法
- 優先掌握
- 字典類型內置方法
- 優先掌握
- 需要掌握
- 集合類型內置方法
- 優先掌握
- 需要掌握
- 數據類型總結
- 可變or不可變
- 有序or無需
- 存一個值or多個值
- 拷貝
- 淺拷貝
- 深拷貝
- 字符編碼
- Python3解釋器編碼
- 文件操作
- 打開文件的流程
- with管理上下文
- 打卡文件的三種模式
- 同時打開兩個文件
- 文件復制
- 打開文件file后,file的方法
- 函數
- 定義函數
- 函數的三種形式
- 調用函數
- 函數的返回值
- 函數的參數
- 形參:接受實參,具有某種描述意義,但沒有具體的值
- 實參:具有具體的值
- 可變長參數
- *
- **
- 函數對象
- 函數嵌套
- 名稱空間與作用域
- 可變的作用域事項(了解)
- 閉包函數
- 裝飾器
- 無參裝飾器
- 有參裝飾器
0524總復習
計算機之編程
什么是編程語言
編程語言是人與計算機交流的介質
什么是編程
編程就是使用編程語言編寫一個個文件
為什么要編程
為了奴隸計算機,解放勞動力,幫人類完成一個個具體的任務
計算機組成原理
計算機五大組成
CPU
控制器
控制硬件
運算器
進行邏輯運算+算術運算
內存
臨時存儲數據的硬件
- 優點(相比較于外存):速度快
- 缺點(相比較于外存):臨時存儲/斷電即消失
外存
永久存儲數據的硬件
- 優點(相比較于內存):永久存儲
- 缺點(相比較于內存):速度慢
輸入設備
輸入信息的硬件,如鍵盤/鼠標/u盤
輸出設備
輸出信息的硬件,如顯示器/打印機/u盤
I/O設備
即可輸入信息,又可以輸出信息的硬件,稱為I/O設備
32位和64位
32位
一次性能讀取32個二進制位的操作系統
64位
一次性能讀取64個二進制位的操作系統
多核CPU
可以同時完成多件事的CPU,如4核CPU則一個大的CPU集成了4個小的CPU
硬盤工作原理
機械硬盤工作原理
- 機械手臂:尋找數據
- 磁道:存儲數據
- 扇區:劃分磁道
- 平均尋道時間:由于工業水平的限制,為5ms
- 平均延遲時間:以7200r/min的硬盤為例,為4.15ms
$$
7200(r/min) / 60 = 120(r/s) \
1/120(r/s) = 0.0083s = 8.3ms \
8.3 / 2 = 4.15ms \
$$
- 平均尋找數據時間:5+4.15=9.15ms
固態硬盤工作原理
- 基于算法和電存儲的外存
計算機操作系統
文件是什么?
操作系統提供的一個虛擬的單位
應用程序是什么?
應用程序其實就是一堆文件,用來完成具體的某個任務
操作系統能干什么?
接受應用程序/人的外部指令,然后控制硬件
計算機三大組成?
應用程序
應用程序其實就是一堆文件,用來完成具體的某個任務,與人/操作系統交互
操作系統
接受應用程序/人的外部指令,然后控制硬件,與人/應用程序/硬件交互
硬件
最終的目的是用來存儲數據,與操作系統交互
應用程序的啟動和操作系統的啟動?
應用程序的啟動
操作系統的啟動
編程語言分類
機器語言
- 優點(匯編語言):執行效率高
- 缺點(匯編語言):開發效率低
匯編語言
- 優點(機器語言):開發效率高
- 缺點(機器語言):執行效率低
高級語言
解釋型語言
類似于同聲傳譯,寫一句翻譯一句
- 優點(編譯型語言):開發效率高
- 缺點(編譯型語言):執行效率低
編譯型語言
類似于谷歌翻譯,寫完所有的代碼,一次性編譯后得到結果,并且結果可以保存,無法得到及時的報錯反饋
- 優點(解釋型語言):執行效率高
- 缺點(解釋型語言):開發效率低
執行Python程序的兩種方式
交互式
在終端內輸入python3,然后輸入python代碼
命令行式
在終端內輸入python3 文本文件路徑
執行Python程序的兩種IDE
Pycharm
Jupyter
變量
什么是變量?
變量一般用來用來描述世間萬物變化的狀態
變量的組成?
變量名 = 變量值
- ==變量名是用來接收變量值的==
變量名的定義規范
定義變量的兩種方式
- 駝峰體:NameOfNick
- 下劃線:name_of_nick(推薦)
常量
常量是約定俗成的一種規范,常量名的定義方式為全大寫.實際上可以被修改.
注釋
單行注釋
#注釋的語句,#后面的字符不執行語法,即只為普通字符,一般用來解釋某一段代碼
多行注釋
三單引號/三雙引號
引用計數
變量值的引用次數
x = 257 # 257的引用計數為1 y = x # 257的引用計數為2 del x # 257的引用計數為1垃圾回收機制
當變量值的引用計數為0的時候,該變量值會被Python自動回收它的內存占用
小整數池
[-5,256]之間的整數會在Python解釋器啟動的時候,自動開辟一塊內存存入這些整數.也就是說這些整數不會因為引用計數為0而被刪除
與用戶交互
input
input輸入的都是字符串形式
格式化輸出
占位符
%s接收任意數據類型的數據
%d接收數字類型的數據
format格式化
{}接收任意數據類型的數據
name = 'nick''nick name is {}'.format(name)f-string格式化
在字符串前面加上f或F,然后使用{}接收任意數據類型的數據
name = 'nick'f'nick name is {name}'基本運算符
算術運算符
+ - * / % // **
邏輯運算符
and or not
比較運算符
> >= < <= == !=
賦值運算符
= += -= *= /= //= **= %=
身份運算符
is is not
- id相同的值一定相同,值相同的id不一定相同
運算符優先級(略)
如果需要某個運算符優先運算,則加個括號,使用a and b is c == d的是傻逼
鏈式賦值
x = y = z = 10
交叉賦值
# 交叉賦值 x = 10 y = 20x, y = y, xprint(x, y)# 使用臨時變量 x = 10 y = 20 temp = x x = y y = tempprint(x, y)解壓縮
hobby_list = ['read','run','sleep','fishing','piao']# 如果取第2-3個愛好_,hobby2,hobby3,*_ = hobby_listprint(hobby2, hobby3)流程控制
流程控制之if判斷
if
if 條件:代碼塊if...else
if 條件:代碼塊 else:代碼塊if...elif....elif...else
if 條件:代碼塊 elif 條件: 代碼塊 elif 條件:代碼塊...(可以寫任意個elif)else:代碼塊流程控制之while循環
while
while 條件:代碼塊while + break
while 條件:代碼塊break # 結束本層循環,跳出循環while + continue
while 條件:代碼塊if 條件:代碼塊cotinue # 不執行下面代碼,然后繼續循環,即跳出本次循環代碼塊while + else
while 條件:代碼塊 else:print('如果我沒有被break,我就會被打印出來')流程控制之for循環
for
for i in range/str/list/tuple/dict/set(可迭代對象):print(i)for + break
for i in range/str/list/tuple/dict/set(可迭代對象):print(i)break # 結束本層循環for + continue
for i in range/str/list/tuple/dict/set(可迭代對象):print(i)if 條件:continue # 結束本次循環,即不執行下面代碼,繼續循環代碼塊for + else
for i in range/str/list/tuple/dict/set(可迭代對象):print(i) else:print('如果我沒有被break,我就會被打印出來')數據類型內置方法
數字類型內置方法
整型
- 可變:值變id不變,值變id也變
浮點型
字符串類型內置方法
列表類型內置方法
元祖類型內置方法
字典類型內置方法
集合類型內置方法
布爾類型
數據類型總結
| 整型/浮點型/字符串 | 列表/元祖/字典/集合/ |
| 字符串/列表/元祖 | 字典/集合 |
| 列表/字典/集合 | 整型/浮點型/字符串 |
拷貝
- ==拷貝/淺拷貝/深拷貝都是針對可變類型數據而言的==
如果l2是l1的拷貝對象,則l1內部的任何數據類型的元素變化,則l2內部的元素也會跟著改變,因為可變類型值變id不變
淺拷貝
import copyl1 = ['a','b','c',['d','e','f']] l2 = copy.copy(l1)l1.append('g')print(l1) # ['a','b','c',['d','e','f'],'g'] print(l2) # ['a','b','c',['d','e','f']]l1[3].append('g')print(l1) # ['a','b','c',['d','e','f','g'],'g'] print(l2) # ['a','b','c',['d','e','f','g']]如果l2是l1的淺拷貝對象,則l1內的不可變元素發生了改變,l2不變;如果l1內的可變元素發生了改變,則l2會跟著改變
深拷貝
import copyl1 = ['a','b','c',['d','e','f']] l2 = copy.deepcopy(l1)l1.append('g')print(l1) # ['a','b','c',['d','e','f'],'g'] print(l2) # ['a','b','c',['d','e','f']]l1[3].append('g')print(l1) # ['a','b','c',['d','e','f','g'],'g'] print(l2) # ['a','b','c',['d','e','f']]如果l2是l1的深拷貝對象,則l1內的不可變元素發生了改變,l2不變;如果l1內的可變元素發生了改變,l2也不會變,即l2永遠不會因為l1的變化而變化
age = 18 # 答案 count = 0 # 游戲次數控制 prize_dict = {0:'布娃娃',1:'變形金剛',2:'奧特曼',3:'<Python從入門到放棄>' }# 核心代碼 while count < 3:inp_age = input('請輸入你的年齡>>>').strip() # 與用戶交互# 判斷用戶是否騷擾if not inp_age.isdigit():print('傻逼,你的年齡輸錯了')continueinp_age_int = int(inp_age)# 核心邏輯,判斷年齡if inp_age_int == age:print('猜對了')print(prize_dict) # 打印獎品# 獲取兩次獎品for i in range(2):prize_choice = input('請輸入你想要的獎品,如果不想要,則輸入"n"退出!!!').strip() # 與用戶交互獲取獎品# 判斷是否需要獎品if prize_choice != 'n':print(f'恭喜你獲得獎品: {prize_dict[int(prize_choice)]}')else:breakbreakelif inp_age_int < age:print('猜小了')else:print('猜大了')count += 1 # 成功玩一次游戲if count != 3:continueagain_choice = input('是否繼續游戲,繼續請輸入"Y",否則任意鍵直接退出.').strip() # 交互是否再一次# 判斷是否繼續if again_choice == 'Y':count = 00531總復習
數據類型內置方法
整形類型內置方法
+ - * / // % **
浮點型類型內置方法
+ - * / // % **
字符串類型內置方法
優先掌握
需要掌握
了解
列表類型內置方法
優先掌握
需要掌握
元組類型內置方法
優先掌握
字典類型內置方法
優先掌握
需要掌握
集合類型內置方法
優先掌握
需要掌握
數據類型總結
可變or不可變
| 列表,字典,集合 | 字符串,整形,浮點型 |
有序or無需
| 字符串,列表,元組 | 字典,集合 |
存一個值or多個值
| 整型,浮點型,字符串 | 列表,集合,字典,元組 |
拷貝
l1= [1,1] l2 = l1- 當l2為l1的拷貝對象時,l1發生變化,l2也會隨之發生變化
淺拷貝
l1 = [1,2,[1,2]] import copyl2 = copy.copy(l1)- 當l2為l1的淺拷貝時,l1內部的不可變元素發生變化,l2不變;l1內部的可變元素發生變化,l2也會隨著發生變化
深拷貝
l1 = [1,2,3,[2,3]] import copyl2 = copy.deepcopy(l1)- 當l2為l1的深拷貝對象時,l1內部的元素發生變換,l2都不會發生變化
- ==拷貝/淺拷貝/深拷貝都是針對可變類型數據而言的==
字符編碼
- 用什么編碼寫的文件,就用什么編碼打開,unicode--》gbk 編碼encode;gbk ---》 unicode 解碼 decode
Python3解釋器編碼
當python3解釋器啟動,并生成變量時,會以unicode的形式把變量讀入內存,當我們使用print方法時,print會自動按照終端的字符編碼 編碼unicode形式的變量
生成變量時以unicode丟入內存,終端時gbk,還是utf8,這終端都可以識別。
生成變量時以utf8丟入內存,終端為utf8,可以,但是終端為gbk,不可以了。==錯誤==
文件操作
打開文件的流程
with管理上下文
with open(文件名,打開模式,編碼格式) as f:f.操作命令打卡文件的三種模式
- t 文本模式(默認)
- b 二進制模式
同時打開兩個文件
with open(文件一),open(文件二),open(文件三)……文件復制
with open('a.txt','r',encoding='utf8') as fr, open('a_swap.txt','w',encoding='utf8') as fw:data = fr.read()# 做一些處理之后fw.write(data)fw.flush()import osos.remove('a.txt') os.rename('a_swap.txt','a.txt')打開文件file后,file的方法
函數
定義函數
def 函數名():代碼塊- 定義階段只檢測語法,不執行代碼
函數的三種形式
調用函數
def f1():return 2f1() f = f1()- 調用階段才執行代碼
函數的返回值
- 默認為None,如果遇到return則會終止函數,可以返回多個值(接收的時候為元組形式),并且值為任意數據類型
函數的參數
形參:接受實參,具有某種描述意義,但沒有具體的值
實參:具有具體的值
可變長參數
*
**
函數對象
def f1():pass# 1.引用 f = f1# 2.當作返回值 def f2():return f1# 3. 當作參數傳入 def f3(func):func() f3(f1)# 4. 作為容器元素lis = [1,2,3,[2,3],f1,f2,f3]函數嵌套
def f1():def f2():pass名稱空間與作用域
- 執行順序:內置--》全局--》局部
- 查找順序:從當前位置開始,如果當前為局部,則為局部--》全局--》內置
作用域: 全局的變量和局部的變量沒有任何關系,即使兩者中有同一名字的變量,同意名字的變量之間進行任何操作都不會影響對方
x = 10def f1():x = 2print(x) # 2f1()print(x) # 10可變的作用域事項(了解)
lis = [1]def f1():lis[0] = 2f1()print(lis) # [2]閉包函數
def f1(x):def f2():print(x)return f2f = f1(5) # f-->f2,x=5 f() # f()-->f2(),x=5 # 5 f() # 5f3 = f1(3) # f-->f2,x=3 f3() # f()-->f2(),x=3 # 3 f3() # 3- 把內部定義的變量放到內部的函數中,讓兩者一起返回出去
裝飾器
def deco(func):def wrapper(*args,**kwargs): # 賦值后的time_sleepres = func(*args,**kwargs) # 真正的time_sleepreturn resreturn wrapper@deco # time_sleep(賦值后的) = deco(time_sleep(真正的)) def time_sleep(name):print(name)return 123無參裝飾器
is_login_dict = {'username': None}def login_deco(func):def wrapper(*args, **kwargs): # 賦值后的time_sleepif not is_login_dict['username']:username = input('請輸入你的用戶名》》》').strip()if username != 'fanping':print('非法登錄')returnis_login_dict['username'] = usernameres = func(*args, **kwargs) # 真正的time_sleepreturn reselse:res = func(*args, **kwargs) # 真正的time_sleepreturn res return wrapper@login_deco def shopping():print('from shopping')@login_deco def withdraw():print('from withdraw')有參裝飾器
is_login_dict = {'username': None}def auth(origin):def login_deco(func):def wrapper(*args, **kwargs): # 賦值后的time_sleepif origin == 'file':if not is_login_dict['username']:username = input('請輸入你的用戶名》》》').strip()if username != 'fanping':print('非法登錄')returnis_login_dict['username'] = usernameres = func(*args, **kwargs) # 真正的time_sleepreturn reselse:res = func(*args, **kwargs) # 真正的time_sleepreturn reselif origin == 'mongodb':print('非法登錄')else:print('dsb')return wrapperreturn login_deco# f = origin('file') # login_deco # shopping = f(shopping) # shopping()@auth('file') def shopping():print('from shopping')@auth('mongodb') def withdraw():print('from withdraw')- ==裝飾器是為了給函數增加功能,但是不改變函數內部語法,不改變函數調用方式==
轉載于:https://www.cnblogs.com/1naonao/p/10932642.html
總結
- 上一篇: AJAX之封装+跨域
- 下一篇: NFS共享储存