DAY 03 PYTHON入門
程式=資料+功能
1、變數
定義:變數即變化的量,核心是“變”與“量”二字,變即變化,量即衡量狀態。
原則:先定義後使用
變數名:用來找值
賦值符號:將變數值的記憶體地址繫結給變數名
變數值:儲存的資料或者說是記錄的事物的狀態
為什麼要有變數?
程式執行的本質就是一系列狀態的變化,變是程式執行的直接體現,所以我們需要有一種機制能夠反映或者說是儲存下來程式執行時狀態以及狀態的變化。
1.1引用
1.2變數名:見名知意
1.3命名的規範:
①由字母、數字、下劃線任意組合
②不能以數字開頭
③不能用python的關鍵字。如:'and', 'as', 'assert',‘print'等
命名風格:
①駝峰體:
②純小寫加下劃線:age_of_oldboy = 18
1.4變數值
id:記憶體地址
id相同,type和value必定相同;value相同,type肯定相同,但id可能不同。
is:判斷id是否相等
==:判斷值是否相等
注意:
如果id相等,證明就是同一個記憶體地址,值一定相等
小整數池:[-5 256],不斷優化
①在互動式模式下python實現int的時候有個小整數池。為了避免因建立相同的值而重複申請記憶體空間所帶來的效率問題, Python直譯器會在啟動時創建出小整數池,範圍是[-5,256],該範圍內的小整數物件是全域性直譯器範圍內被重複使用,永遠不會被GC回收
②在pycharm中但在pycharm中執行python程式,pycharm出於對效能的考慮,會擴大小整數池的範圍,其他的字串等不可變型別也都包含在內一便採用相同的方式處理了,我們只需要記住這是一種優化機制,至於範圍到底多大,無需細究
布林值:True False None
記憶體管理:垃圾回收機制GC
什麼是GC?
GC:垃圾回收機制(簡稱GC)是Python直譯器自帶一種機,專門用來回收不可用的變數值所佔用的記憶體空間。
為什麼要用垃圾回收機制?
程式執行過程中會申請大量的記憶體空間,而對於一些無用的記憶體空間如果不及時清理的話會導致記憶體使用殆盡(記憶體溢位),導致程式崩潰,因此管理記憶體是一件重要且繁雜的事情,而python直譯器自帶的垃圾回收機制把程式設計師從繁雜的記憶體管理中解放出來。
核心原理:引用計數
分代回收:提升效率
標記清除:迴圈引用導致記憶體洩露問題
X=100 #100的引用計數為1
Y=X #100的引用計數為2
Y=200 #100的引用計數為1
Del X #100的引用計數為0
2、基本資料型別
數字:
#int整型
定義:age=10 #age=int(10)
用於標識:年齡,等級,身份證號,qq號,個數
#float浮點型
定義:salary=3.1 #salary=float(3.1)
用於標識:工資,身高,體重,
整型int:年齡、個數、號碼
浮點型:float
作用:身高、體重、薪資等
字串str:引號巢狀區別。
列表list:[ ]內用逗號分隔開多個任意型別的元素;按照位置存放多個值
字典dict:{ }用逗號分隔開多個元素,每一個元素的組成都是key:value,其中value是任意型別,而key通常是字串型別;按照key存放多個值,key反映的是value的屬性
#int(整型)
在32位機器上,整數的位數為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647
在64位系統上,整數的位數為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
#long(長整型)跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器記憶體有限,我們使用的長整數數值不可能無限大。
注意,自從Python2.2起,如果整數發生溢位,Python會自動將整數資料轉換為長整數,所以如今在長整數資料後面不加字母L也不會導致嚴重後果了。
注意:在Python3裡不再有long型別了,全都是int
>>> a= 2**64
>>> type(a) #type()是檢視資料型別的方法
<type 'long'>
>>> b = 2**60
>>> type(b)
<type 'int'>
#complex複數型
>>> x=1-2j
>>> x.imag
-2.0
>>> x.real
1.0
3、布林型別 True False:記錄真假兩種狀態
4、基本運算子
算術運算子:加減乘除,Shell弱型別,Python強型別、解釋型、動態的語言,GO靜態。
常量:常量即指不變的量,如圓周率 3.141592653..., 或在程式執行過程中不會改變的量。
字串
#在python中,加了引號的字元就是字串型別,python並沒有字元型別。
定義:name='egon' #name=str('egon')
用於標識:描述性的內容,如姓名,性別,國籍,種族
列表
#在[ ]內用逗號分隔,可以存放n個任意型別的值
定義:students=['egon','alex','wupeiqi',] #students=list(['egon','alex','wupeiqi',])
用於標識:儲存多個值的情況,比如一個人有多個愛好
字典
#為何還要用字典?
存放一個人的資訊:姓名,性別,年齡,很明顯是多個值,既然是存多個值,我們完全可以基於剛剛學習的列表去存放,如下
>>> info=['egon','male',18]
定義列表的目的不單單是為了存,還要考慮取值,如果我想取出這個人的年齡,可以用
>>> info[2]
18
但這是基於我們已經知道在第3個位置存放的是年齡的前提下,我們才知道索引2對應的是年齡
即:
#name, sex, age
info=['egon','male',18]
而這完全只是一種假設,並沒有真正意義上規定第三個位置存放的是年齡,於是我們需要尋求一種,即可以存放多個任意型別的值,又可以硬性規定值的對映關係的型別,比如key=value,這就用到了字典
布林
#布林值,一個True一個False
#計算機俗稱電腦,即我們編寫程式讓計算機執行時,應該是讓計算機無限接近人腦,或者說人腦能幹什麼,計算機就應該能幹什麼,人腦的主要作用是資料執行與邏輯運算,此處的布林型別就模擬人的邏輯執行,即判斷一個條件成立時,用True標識,不成立則用False標識
>>> a=3
>>> b=5
>>> a > b #不成立就是False,即假
False
>>> a < b #成立就是True, 即真
True
接下來就可以根據條件結果來幹不同的事情了:
if a > b
print(a is bigger than b )
else print(a is smaller than b )
上面是虛擬碼,但意味著, 計算機已經可以像人腦一樣根據判斷結果不同,來執行不同的動作。