一:語法和語句 # :註釋 \ : 轉譯回車,繼續上一行,在一行語句較長的情況下可以使用其來切分成多行,因其可讀性差所以不建議使用 ; : 將兩個語句連接到一行,可讀性差,不建議使用 : : 將代碼的頭和體分開 語句(代碼塊)用縮進方式體現不同的代碼級別,建議採用4個空格(不要使用tab) pyth ...
一:語法和語句
# :註釋
\ : 轉譯回車,繼續上一行,在一行語句較長的情況下可以使用其來切分成多行,因其可讀性差所以不建議使用
; : 將兩個語句連接到一行,可讀性差,不建議使用
: : 將代碼的頭和體分開
語句(代碼塊)用縮進方式體現不同的代碼級別,建議採用4個空格(不要使用tab)
python文件以模塊的方式組織,編寫一個.py結尾的文件實際上就寫了一個模塊
二:變數定義與賦值
a=1;1為記憶體變數存放於記憶體中,a為變數的引用,python為動態語言,變數及其類型均無需事先聲明類型
與c的區別,a=1無返回值
PS:
c語言變數聲明必須位於代碼最開始,而且要在所有語句之前
c++,java可以隨時聲明變數,但是必須聲明變數名字和類型
Python也可以隨時隨地聲明變數,但是變數被定義時,解釋器會根據等式右側的值來決定其類型
變數必須先賦值,才可以
三:記憶體管理
變數無需指定類型
程式員無需關係記憶體管理
變數會自動回收
del能夠直接釋放記憶體隊形(減少對象的引用計數)
什麼事引用計數?
增加引用計數:
1.對象被創建並將其引用賦值給變數,引用計數+1(例如a=1)
2.同一個對象的引用又賦值給其它變數,引用計數+1(b=a)
3.對象作為參數被函數調用,引用計數+1(int(a))
4.對象成為容器對象中的一個元素,引用計數+1(list=['chars_lee','man',a])
減少引用計數:
1.a作為被函數調用的參數,在函數運行結束後,包括a在內的所有局部參數均會被銷毀,引用計數-1
2.變數被賦值給另一個對象,原對象引用計數-1(例如a=1,b=a,b=2)
3.使用del刪除對象的引用,引用計數-1(del a)
4.a作為容器的元素被清除時,引用計數-1(例如list.remove(a))
5.容器本身被銷毀,引用計數-1(del list)
註意:python記憶體回收交給一段獨立的代碼即垃圾回收站(包含引用計數器和迴圈垃圾收集器),引用計數在歸零時並不會立即清除(可能有迴圈調用)
不必糾結迴圈引用收集,只需記住垃圾回收器會自動幫你清理記憶體。
簡單例子
x=1 #創建記憶體變數1,將變數1的引用傳個x,此刻1的引用計數為1
y=x #1的引用計數增加到2
y=2 #創建新的記憶體變數為2,將變數2的引用傳給y,原本指向1的y,此刻給了2,所以1的引用計數-1
del x #刪除記憶體對象1的引用x,此刻1再無引用,此刻它就成了python解釋器回收的目標
會有這麼一種情況,當a=1時,記憶體會開闢一塊空間,當b=1時,按道理記憶體應該開闢一塊新的空間,但是使用id函數查看a,b他們兩個的記憶體地址相同。為什麼?
因為像這種數字1占用記憶體的空間存很少。頻繁申請記憶體空間是屬於一種浪費。所以python提供了一種優化機制。像這種長度,或者占用記憶體比較小的的這種類型。python會進行緩存
四:python對象
Python中使用對象模型來存儲數據,用來生成數據類型的工廠函數本質上是類。新建數據的結果本質是實例化一個對象
對象有三大特性
身份:記憶體地址,可以用id()確認,id相同的就是同一個對象
類型:可以用type()查看,返回值的type也是對象
值
五:標識符
定義:允許作為名字的有效字元串集合
名字必須有實際意義,可讀性好
首字母必須是字母或下劃線(_)
剩下的字元可以是字母和數字或者下劃線
大小寫敏感
兩種風格:conn_obj或ConnObj
不能使用關鍵字,不能使用內建
關鍵字表:
內建:由解釋器自動導入(提供基本功能),可以看作全局變數,
六:專用下劃線標識符
__xxx:不能用from module import *導入
__xxx__:系統定義名字
__xxx:類中私有變數
下劃線對於解釋器來說有特殊意義,而且是內建標識符所使用符號,不建議自定義變數以下劃線開頭
但是如果是類中的私有變數,__xxx將會是一個好習慣
補充:
- 系統變數__name__會根據python文件被載入方式的不同得出不同的值
- python文件被當作模塊導入:__name__=模塊名或者文件名
- python文件被執行:__name__='__main__'
-
在我們使用python編寫一個軟體時,應該只有一個主程式中包含大量頂級代碼(就是沒有縮進的代碼,
python解釋器讀取到頂級代碼會立即執行),其他.py文件應該只有少量頂級代碼,所有功能都應該封裝
在函數或類中
- 通常在文件結尾結合__name__變數,編寫測試代碼
7:編寫python基本風格
標題
文檔註釋
模塊導入
變數定義
類定義語句
函數定義語句
主程式
測試代碼
例如
#_*_coding:utf-8_*_
#!/usr/bin/env python
'''
This is an example module #三引號屬於多行註釋,通常在裡面寫這個py文件的功能介紹,以及作者等等
'''
import sys,os #導入系統模塊
debug=True #定義變數(頂頭寫代表全集有效)
class Test: #定義類
'''
test class
'''
pass
def main(): #定義函數
'''
test func
:return:
'''
pass
if __name__ == '__main__':
main()