1. 程式人生 > 其它 >Day76--階段複習01

Day76--階段複習01

今日內容

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屬性