Day76--階段複習01
阿新 • • 發佈:2021-11-23
今日內容
1.個人介紹
劉清政,劉老師,老劉 ,Justin
2.關於編輯器
python開發:pycharm(收費),vscode(免費),sublintext, go開發:goland(收費),vscode,國產的 java:idea(收費),eclipse(免費),MyEclipse(收費) android:androidstudio(免費),eclipse+adt 前端:webstorm(收費) php:phpstorm(收費) 資料庫開發:data jetbrains公司出的全家桶,一個註冊碼,可以都用 androidstudio:買了jetbrains公司授權,在它基礎上,做了它
3.基礎串講
3.1.解釋型和編譯型
# 你出去之後開發環境:windows開發(主流),Linux, Mac # sanic,fastapi框架,windows安裝不上(不支援), # 裝了烏班圖(linux系統)在上面開發,或配mac本 # 或 遠端連線linux開發,遠端連linux內的docker開發 編譯型: c:c程式碼寫完,編譯(不同平臺上),導致跨平臺執行(差),例如 linux上 需原始碼安裝軟體,先自行編譯,再執行 java: 一處編碼,處處執行 java是編譯型還是解釋型? 編譯型 編譯過程:把java原始碼編譯成位元組碼檔案 .class ---但該位元組碼不能直接執行在作業系統之上----》藉助jvm(java虛擬機器 類似於Python的直譯器,可以在不同平臺上安裝,從而解決跨平臺性差的問題) 但jvm執行至少要300m記憶體 (比較佔記憶體,故Java中,有一個優化問題:jvm調優) jdk jre jvm javase(基礎) javame(很老手機的Java開發 不是安卓機,是塞班系統的Java遊戲) javaee(做Java web開發) go:編譯型,跨平臺編譯(windows平臺可以編譯出mac平臺的可執行檔案),所有go程式碼可直接打包成一個可執行檔案 (對比Python的優點) 解釋型: python: 強型別動態語言 別人使用我的Python程式,要嘛 下載Python直譯器,要嘛我使用框架打包成EXE可執行檔案 (例如:pyinstaller 本質是將Python直譯器也打包到exe當中了,且不是很成熟,老出錯) js:只能在瀏覽器中執行,nodejs(js做後端開發) php:web開發 # 你們將來從從事的方向 1 python後端開發:做網站,前端可以是app,小程式的python後端 2 自動化運維:收集伺服器軟硬體資訊(cmdb),jumpserver(堡壘機),sql審批,監控,日誌收集與處理 devops:ci/di 3 自動化測試:selenium(網站測試),appnium(app測試),pytest 4 資料分析: 5 爬蟲: 6 量化交易 7 人工智慧,影象處理 8 安全方向:埠掃描,弱口令掃描,sql注入,csrf攻擊,xss攻擊(《Python絕技:運用python成為頂級黑客》 提前看看) 9 網路方向 10 物聯網方向:硬體互動 (不走http協議,硬體檢測資料,用socket程式設計上傳資料) # 申請一個github賬號 # 維護一個部落格(部落格園,自己寫的,hexo搭建)
3.2資料型別
3.2.1一切皆物件
python中一切皆物件 # type和object的關係 1 type是object的類 object是由type例項化得到 2 type繼承了object 3 type是type自己的類 總結:type 是所有類(包括自己)的元類,其他類都是由它例項化得到的 object 是所有類(不包括自己)的父類,其他類都繼承於它 a=int(2) # int是一個類,具體實現是由c語言實現的,如果寫了pass,看不到原始碼,有一部分可以看到 # print(type(1)) # int :數字1 的類是int # print(type(int)) # print(type(dict)) # int dict 都是type類的物件 # int dict 繼承了object # type和object是什麼關係? # def a(): # pass # print(type(a)) print(type(int)) # type print(type(object)) # type print(type(type)) # type
3.2.2深淺copy
# 一切皆物件的好處
不同型別之間的變數直接可以相關賦值
a=100
a='xxx'
其實本質,變數都是指向了一個記憶體地址,而不是直接指向資料本身 從而實現,變數可以通過賦值(指向其他的記憶體地址)來改變自己的資料型別
於是 出現了深淺copy問題
# 深淺copy問題
變數----->記憶體地址----->資料本身
l = [1,2,3,[4,5,6]]
l2 = l # 賦值 (是新的變數,指向同一個記憶體地址)
print(l2 is l) # True
from copy import copy
from copy import deepcopy
l3 = copy(l)
print(l) # [1,2,3,[4,5,6]]
print(l3) # [1,2,3,[4,5,6]]
print(l is l3) # False 淺拷貝 (新的變數,指向了記憶體地址的一個新淺拷貝地址)
l3[3][1]=999
print(l) # [1,2,3,[4,999,6]]
print(l3) # [1,2,3,[4,999,6]] # 淺拷貝 (新的拷貝地址,只拷貝了表面第一層,所以若是修改拷貝地址或原地址的 深地址第二層或更多層,另一個也會改變)
l4 = deepcopy(l)
l4[3][1] = 999
print(l) # [1,2,3,[4,5,6]]
print(l4) # [1,2,3,[4,999,6]]
print(l4 is l) # False 深拷貝 (新的變數,指向了記憶體地址的一個新深拷貝地址,不管原地址有多少層 全部拷貝,全新的,兩個相互獨立)
3.2.3可變型別與不可變型別
#字典,列表,集合 可變型別
#數字,字串,元組 不可變型別
# 字典的key必須用不可變型別,可以hash
# 看一下這篇部落格
https://www.cnblogs.com/xiaoyuanqujing/articles/12008689.html
# python中的引數傳遞是值傳遞還是引用傳遞?
python中引數傳遞都是淺拷貝copy一份傳遞過去,由於一切皆物件,傳過去都是地址,python中區分可變和不可變型別,可變型別在函式中修改會影響原來的,不可變型別不會影響原來的
3.3字元編碼
# 計算機的計量單位:
bit位元位:0或者1的一個小格
8個bit位是一個byte,一個位元組
1024個位元組---》1kb
1024kb---》1mb
1024mb---》1gb
1個位元組---》2的8次方 種變化,就可以表示出所有的字元(數字,字母,標點符號)
計算機到了中國---》中國漢字--》gbk編碼
但是到了不同國家,不同國家有不同國家編碼方式,就會出現亂碼問題
Unicode編碼統一了,只是規定了字元和數字的對應關係
具體的儲存方式:
utf-8:目前主流的編碼方式 可變動的儲存
(是不定長的:一個英文字元佔1Bytes,一箇中文字元佔3Bytes,生僻字用更多的Bytes儲存)
utf-16
需要說清楚:assic碼,gbk,unicode,utf-8
3.4閉包函式
# 1 定義在函式內部
# 2 對外部作用域有引用
函式是一等公民:函式可以賦值給一個變數
# 裝飾器是閉包函式的典型應用
# python中有裝飾器語法糖 @
def wrapper(func):
def inner(*args,**kwargs):
# 程式碼
res=func(*args,**kwargs)
# 程式碼
return res
return inner
# 沒有語法糖
def a():
print("xxx")
a=wrapper(a)
a()
# 有語法糖
@wrapper()
def a():
print("xxx")
# 面向切面程式設計 AOP
# OOP 面向物件程式設計
作業
# 前後端傳資料三種編碼格式(urlencode、formdata、json) 傳json格式時,原生django不能從request.POST中取出字典, 資料在request.body中
# 1.用中介軟體或者裝飾器前端不管傳json還是其他格式,requests物件中有個data屬性