總複習:
1.計算機核心組件:
- CPU
- 內存
- 硬盤
- 輸入設備: 鍵盤、鼠標
- 輸出設備: 顯示器、音響..php
2.python解釋器:
- 將人類編寫好的代碼轉成機器能看得懂的字符。
- 解釋器的做用:
幫你執行python代碼。java
3.pycharm編輯器:
- 編輯器的做用:
能夠更好的編寫python代碼,編輯器內部有不少強大的功能。
可以快速編寫代碼。python
4.編程語言分類:
- 機器語言(機器能直接看懂):
好比: 01010101c++
- 彙編語言(讓人能看懂一點點):
好比: a ---> 01101001git
- 高級語言(讓人類能直接看懂):
好比: print('hello')
高級語言是更接近於人類的語言。面試
- 解釋型:
一遍解釋(翻譯)一遍執行, 相似於同聲傳譯。正則表達式
優勢:
開發效率高
可跨平臺,一份代碼能夠多個平臺使用。編程
缺點:
執行效率相比於編譯型低。json
- 編譯型:
先一次性編譯而後再執行,相似於 "有道翻譯"。flask
優勢:
執行效率高。
穩定義
缺點:
開發效率相比於解釋型語言要低。
不可跨平臺。
- 解釋型語言的種類:
python: 10級別
c# :
java: 8
php: 3
- 編譯型語言的種類:
C
c++
go
5.變量:
變量指的是可變化的量。
- 變量名: 能夠與變量值綁定關係,經過變量名能夠訪問變量值。
- 至關於身份證ID號
- 賦值符號(=): 是用來將變量名與變量值綁定關係。
- 變量值: 變量值 指的是 「數據」, 存放在內存中。
6.垃圾回收機制: 注意: GC就是用來作垃圾回收機制的東西。
- 變量名 = 變量值 # 添加一個引用計數
當變量值的引用計數爲0時,垃圾回收機制會「不定時」釋放資源。
7.查看變量三大特徵
- id
- type
- value
8.變量名的命名規範
- 駝峯命名法: 在寫類名的時候使用
首字母大寫命名
好比: JasonSb
- 下劃線命名法: 推薦使用
好比: jason_sb
9.python中八大數據類型
- int:
number = 100 # number = int(100)
- 不可變類型
- float
salary = 1.0 # salary = float(1.0)
- 不可變類型
- str
str1 = 'tank' # str1 = str('tank')
- 不可變類型
# 按照索引取值
str1[1] # 取第二個值
str1[1:10:2] # 顧頭不顧尾
# 內置方法
str1.split() # 切分
str1.strip() # 去左右兩邊的空格
str1.strip('i') # 去左右兩邊的i
# tank10
str1.join(['tank', '10']) # 字符串的拼接,必須是字符串類型
# 判斷字符串開頭,若正則返回True,不然返回False
str.startswith()
# 判斷字符串結尾,若正則返回True,不然返回False
str.endswith()
# 判斷字符串是不是數字,若正則返回True,不然返回False
str.isdigit()
# 新舊替換
str.replace('舊的', '新的')
# 獲取某個字符的數量
str.count('字符')
# 查找字符的位置 索引 多是面試題
str.find('字符') # 找不到返回-1
str.index('字符') # 找不到報錯
- list
在[]內,能夠存放多個值,每一個值以逗號隔開。
list([v1, v2..])
- 可變類型
- 經常使用內置方法:
list.append() # 追加
list.insert() # 插入值到指定的索引中
list.pop() # 取出某個值,默認取出最後一個
list.remove() # 真正的刪除元素
list.extend() # 列表合併
list.sort(reverse=True) # 默認升序 , reverse=True降序
list.copy() # 淺拷貝
- tuple
tuple((v1, v2...))
- 不可變類型
- dict
特色: key是惟一的。
dict({key:value, ...})
- 可變類型
dict[key] # 沒有key會報錯
dict.get(key, '自定義默認值') # 沒有key會報錯,默認返回None
dict.items() # 返回一個可迭代對象
dict.keys()
dict.values()
dict.fromkeys('k1', []) # 生成字典 ---》 {'k1': []}
- set
特色: 內置去重功能。
set({v1, v2...})
- 默承認變類型
# 內置方法
set.add()
set.remove()
- bool:
True or False
- 不可變類型
什麼是可變?
值變了,id不變稱之爲可變類型。
什麼是不可變?
值變了,id也變 稱之爲不可變類型。
10.字符編碼
結論: 以什麼編碼,就以什麼解碼。
utf-8:
- 存中文是3個字節。
- 存英文是1個字節
gbk:
- 存中文是2個字節。
- 存英文是2個字節
11.文件處理:
f = open('文件名的路徑', '打開的模式', encoding='字符編碼')
f.close()
# 文件的上下文管理: with , flask框架的上下文管理(後期學習)
with open('文件名的路徑', '打開的模式', encoding='字符編碼') as f:
# 內部幫你執行f.close()
- 打開模式:
- 文本模式:
- rt
- wt
- a
- 二進制模式:
- rb
- wb
- ab
- 光標移動:
f.seek('光標移動的位置', 0) # 開頭
f.seek('光標移動的位置', 1) # 當前
f.seek('光標移動的位置', 2) # 末尾
- 打開文件取值的優化方式:
- f.read():
直接將文件中全部數據一次性取出。
缺點:
內存容易溢出。
- for循環f句柄操做:
# 經過for循環,將每一行取出,保證不會內存溢出
for line in f:
print(line)
- f.readline(): (瞭解)
讀取一行,光標移動到第二行。
12.函數基礎
函數是一些列功能的結合體,是一個能夠重複使用的工具。
- 函數定義:
def 函數名(參數1, 參數2...):
'''註釋: 說明函數的做用'''
# 邏輯代碼
return 返回值
- 函數調用
函數() # 如有參數則要傳參
- 定義有參、無參、空函數
def func1(參數):
邏輯代碼
pass
def func2():
# 邏輯代碼
pass
def func3():
pass
- 函數的參數:
- 定義階段: (參數用來接收調用者傳入的)
- 位置形參參數
- 默認參數
- 可變長參數
- 調用階段: (根據函數的定義者傳的)
- 位置實參參數
- 關鍵字參數
- 注意:
# 參數從左到右的順序
位置 ---》 關鍵字參數 ---》 可變長參數
- 函數的返回值:
- 返回值能夠是一個或者多個
return 值1 ---> 值1
return 值1, 值2 ---> (值1, 值2)
13.名稱空間與做用域:
- 名稱空間:
在內存中產生,是一個存放名字的地方。
- 內置名稱空空間: python解釋器
- 全局名稱空空間: 文件中全部(頂着最左邊寫的)
注意: 不管嵌套if, while, for 多少層都是一個。
- 局部名稱空空間: 在函數內部定義的。
- 查找順序:
當前局部 ---》 外層局部 ---》 全局 ---》 內置
- 加載順序:
內置 ---》 全局 ---》 外層局部 ---》 當前局部
- 做用域:
- 全局做用域:
- 內置
- 全局
- 局部做用域
- 外層局部
- 內層局部
- global: 在局部能夠聲明全局名字。
至關於將全局變量引用到局部中使用或修改。
- nonlocal: 在內層局部聲明外層局部的名字。
14.函數對象、函數嵌套與閉包
- 函數對象: 函數的名字 ---》 函數的內存地址
- 函數嵌套:
def outer():
def inner():
pass
- 閉包:
爲了裝飾器做準備,它不是一個獨立的技術。
閉包是函數嵌套、函數對象、名稱空間與做用域的結合體。
- 內層函數封閉:
外部不能調用內部的函數。
- 外層函數開放:
外部能調用外層函數
- 閉包:
- 內層函數想要引用外層函數的名字
- 外部想要調用內部的函數,要在外層函數將內層函數的名字返回。
def outer(x): # 10
# x = 10
def inner():
print(x) # 10
return inner
inner = outer(10)
inner() # 實現了外部調用內層函數
15.裝飾器:
裝飾的工具。
做用:
- 1:在不修改被裝飾對象的源代碼
- 2:在不修改被裝飾對象的調用方式
- 基於1和2,爲被裝飾對象添加新功能。
# 無參裝飾器:
def wrapper(func):
def inner(*args, **kwargs):
# 調用被裝飾對象前添加新功能
res = func(*args, **kwargs) # index()
# 調用被裝飾對象後添加新功能
return res
return inner
# 被裝飾對象:
def index(參數1):
print('from index..')
index = wrapper(index)
index(實參1) # inner(實參1)
# 有參裝飾器: ---> 本質上就是無參裝飾器
def login_auth(name):
# 無參裝飾
def wrapper(func):
def inner(*args, **kwargs):
# 對name作一個權限認證
if name == 'tank':
# 調用被裝飾對象前添加新功能
res = func(*args, **kwargs) # index()
# 調用被裝飾對象後添加新功能
return res
else:
print('你不是tank,get out!')
return inner
return wrapper
@ login_auth('tank') # wrapper
@wrapper
def index():
pass
- 疊加裝飾器:
- 裝飾順序:
從下往上
- 執行順序:
從上往下
16.迭代器:
迭代的工具。
- 可迭代對象:
凡是內置有__iter__(),都是可迭代對象。
- 迭代器對象:
凡是內置有__iter__()與__next__(),都是迭代器對象。
優勢:
- 能夠不依賴索引取值
- 節省內存
缺點:
- 取值麻煩
- 沒法獲取長度
- for line in 可迭代對象: ----》 in: 將「可迭代對象」轉成「迭代器對象」
- 內置有捕獲異常機制:
while True:
try:
迭代器.__next__()
except StopIteration:
break
17.生成器:
生成器是一個自定義的迭代器, 生成器本質上就是一個迭代器。
- 如何生成:
- yield
def func():
yield 1
yield 2
yield 3
g = func()
g.__next__()
next(g)
# ---> 生成了生成器對象,而後每執行一次__next__,
# 會取出一個值,到下一個yield會暫停。
18.三元表達式:
res = 條件成立的值 if 條件 else 條件不成立的值
19.列表生成式:
[line for line in 可迭代對象] # ---》 list ---》[line1, line2...]
[[1, 2, 3, line] for line in 可迭代對象] # [line1, line2...]
優勢:
- 能夠依賴索引取值,取值方便
- 能夠獲取長度
缺點:
- 佔用內存空間
20.生成器表達式(生成式):
(line for line in 可迭代對象) # ---> 生成器
優勢:
- 不佔用內存空間
缺點:
- 不能夠依賴索引取值,取值不方便
- 不能夠獲取長度
21.匿名函數與內置函數
- lambda 參數: 返回值
注意: 匿名函數必須配合內置函數使用,不然毫無心義
- 內置函數:
max(key=匿名函數) # 最大值
min(key=匿名函數) # 最小值
sorted(key=匿名函數) # 排序,默認升序,reverse=True降序
map(匿名函數) # 映射
reduce(匿名函數, ) # 合併
from functools import reduce
reduce()
filter(匿名函數,) # 過濾
22.遞歸:
- 遞推:
先遞推,重複往下執行函數自己,每一次執行都會更接近於終止條件。
- 回溯:
當遞推遇到一個終止條件,開始回溯,一層一層往上推導。
23.面向過程編程:
是一門編程思想:
核心是 「過程」 二字,過程指的是解決問題的步驟,即先幹什麼再幹什麼
基於該編程思想編寫程序,就比如一條工廠流水線,一種機械式的思惟方式。
24.模塊:
模塊本質上就是一個.py後綴的文件。
模塊是一系列功能(變量,函數)的結合體。
- 更好管理python代碼
- 三種來源:
- 內置
- 第三方
- 自定義的
- 四種表現形式:
# 關注的:
- 包下帶有__init__.py的文件夾中的一組py文件。
- python解釋器自帶的。
- 模塊的導入方式:
- import 模塊名字
- from 模塊 import 函數/變量名
- 導入模塊時發生的事情:
1.先執行當前執行文件,生成一個當前文件的名稱空間。
2.會執行被導入的模塊,會生成一個被導入模塊的名稱空間。
3.將被導入模塊的名稱空間加載到內存中。
- 首次導入模塊發生的事情:
import demo
import demo
import demo
在執行文件中導入屢次相同的模塊,
會只加載首次導入的模塊的名稱空間。
25.包:
注意: 包也能夠稱之爲模塊。
包是內部帶有__init__.py的文件夾。
包是一系列模塊的結合體,用來管理模塊。
- 導入包時發生的事情:
1.會先執行包下面的__init__.py,產生一個名稱空間。
2.會將包中的全部模塊都加載__init__.py的名稱空間中。
3.當在執行文件中使用包中的模塊,指向的是__init__.py的名稱空間。
- 由__init__.py來幫咱們管理模塊。
- 導入包的方式:
import 包.模塊名
from 包 import 模塊名
from 包.模塊 import 模塊中名字 (變量名/函數名)
26.經常使用內置模塊:
- time (******) --> time.time() , time.sleep()
- datetime (******)
- --> 格式化時間 ---> Format String
- 時間的計算:
日期時間 = 日期時間 + or - 時間對象(時間間隔對象)
時間對象 = 日期時間 + or - 日期時間
- random:
random.random() ---> 隨機獲取 0——1 的浮點數
random.uniform(1, 10) ---> 隨機獲取 1——0 的浮點數
random.randint(1, 10) ---> 隨機獲取 1——0的整數
random.choice(根據索引取值的可迭代對象) ---> 隨機獲取可迭代對象某一個值
random.shuffle(根據索引取值的可迭代對象) ---> 隨機打亂
- os
# 獲取當前執行文件中的目錄(文件夾)
os.path.dirname(__file__)
# 路徑拼接
os.path.join('文件的路徑', '文件名')
# 判斷文件或文件夾是否存在
os.path.exists('文件絕對路徑')
# 判斷文件夾是否存在
os.path.isdir('文件夾絕對路徑')
# 判斷文件是否存在
os.path.isfile('文件絕對路徑')
# 建立文件夾
os.mkdir()
# 刪除文件夾
os.rmdir() # 注意: 只能刪除空的文件夾
# 打印文件夾中全部的文件名
os.listdir('文件夾的路徑')
- sys
sys.path # 環境變量中的路徑
sys.path.append(
'項目目錄'
)
sys.argv # 獲取cmd中的命令行 [py文件路徑, 'tank', '123']
# 能夠作執行用戶的校驗,限制某個用戶能夠執行當前py文件
python3 py文件路徑 tank 123
- hashlib
加密:
MD5:
md5_obj = hashlib.md5()
# 密碼加密
md5_obj.update(密碼.encode('utf-8'))
# 加鹽
md5_obj.update(鹽.encode('utf-8'))
md5_obj.hexdigest()
- 序列化與反序列化:
序列化: 將其餘數據類型 ---》 json數據格式 ---》 字符串 ---》 寫入文件中
反序列化: 讀取文件 ----》 字符串 ---》 json數據格式 ---- 》 其餘數據類型
- json
優勢:
- 能夠跨平臺
缺點:
- 不支持python的set
注意: 傳入的元組變成列表
json.dumps()
- res = 將其餘數據類型 ---》 json格式的字符串
- f.write(res)
json.loads()
- json_res = f.read()
- python_data = json.loads(json_res)
json.dump()
內部執行了f.write()
json.load()
內部執行了f.read()
- pickle
優勢:
- 支持python的任意數據類型
- 能夠存入二進制的數據
- 存取速度快
缺點: (致命的)
- 不能跨平臺使用
- 只能python本身使用
- collections
- 具名元組:
from collections import namedtuple
namedtuple('對象的名字', 'x y')
obj = namedtuple('座標', ['x', 'y'])
target_obj = obj(10, 20)
target_obj.x # 10
target_obj.y # 20
- 有序字典:
from collections import OrderedDict
order_dict = OrderedDict({key: value})
- re:
- 正則表達式
正則表達式是一個獨立的技術, 由一堆特殊的字符組成。
- 字符組
- 元字符
- 組合使用
- re模塊
在python中要想使用正則表達式,必須經過re模塊來編寫。
- subprocess
能夠經過python代碼往操做系統終端輸入命令,並返回結果。
- 能夠遠程操控電腦
- logging:
注意1: log文件的目錄
注意2: log文件名
注意3: log配置字典
注意4:
logging配置字典:
LOGGING_DICT = {}
import logging.config
logging.config.dictConfig(LOGGING_DICT)
logger = logging.getLogger('普通用戶')
logger.info('日誌打印消息...')
27.第三方模塊:
- requests
- requests.get(url) ---> response
- response.text # 獲取文本數據
- response.content # 獲取二進制數據
- openpyxl:
# 建立文件
from openpyxl import Workbook
wb_obj = Workbook()
wb1 = wb_obj.create_sheet('工做表名字1', 0)
wb2 = wb_obj.create_sheet('工做表名字2', 1)
wb1['C30'] = 200
wb_obj.save('文件名字.xlsx')
# 讀取文件
from openpyxl import load_workbook
wb_obj = load_workbook('文件名字.xlsx的路徑')
wb1 = wb_obj['工做表名字1']
print(wb1['C30'].value) # 200
28.防止模塊被導入時自動執行測試代碼
if __name__ == '__main__':
執行測試代碼
29.軟件開發目錄規範:
- 項目目錄:
- conf:
- settings.py
- core:
- src.py # src ---> source
- db:
- data.json
- data.pickle
- interface:
- user_interface.py
...
- lib:
- common.py
- log:
- user_log.log
...
- bin/ start.py:
- start.py
- readme.txt
項目說明書
30.enumerate 可迭代對象: list, tuple, dict # [1, 2, 3] enumerate(可迭代對象) ---》 g((0, 1), (1, 2), (2, 3))