1.語句和語法python
(1)反斜槓"\"表示語句繼續。python良好的編程習慣是一行最後不超過80個字符,一行字符過多時便須用到反斜槓換行繼續該語句。編程
PS:在使用小括號、中括號、大括號時能夠跨行書寫,無須反斜槓;三引號的字符串也能夠跨行書寫app
(2)分號";"能夠在同一行寫多個語句。雖然python支持這麼作,但爲了代碼可讀性,通常不建議這麼作編輯器
( 3 )不使用跨行符也能夠跨行的狀況:小括號、中括號、花括號及三引號之間的內容函數
2.變量賦值oop
(1) python中,對象是引用傳遞的,而不是直接將值賦給對象 如:佈局
>>> a = 123 >>> b = a >>> a 123 >>> b 123 >>> a = 456 >>> a 456 >>> b 123
語句 a = 123,執行的是建立整型 123 以及變量a,並把a指向這個整型;ui
語句 b = a ,執行的是建立變量b 並把b指向a指向的整型123spa
在從新給a賦值時,a的指向發生變化,b的指向並無發生變化,因此在執行 a = 456 以後,a 的值是 456,b的值還是123code
(2)多重賦值 形如x = y = z = 1,一個對象被賦予多個變量
(3)多元賦值 這種賦值方式的等號兩邊都是元組
>>> x, y, z = 1, 2, 'ab' >>> x 1 >>> y 2 >>> z 'ab'
一、二、'ab'三個對象分別賦值給x,y,z
爲了提升代碼可讀性,最好給兩邊的元組都加上括號
>>> (x, y, z) = (1, 2, 'ab') >>> x 1 >>> y 2 >>> z 'ab'
多元賦值能夠方便的用於變量交換
>>> x = 123 >>> y = 456 >>> x 123 >>> y 456 >>> (x, y) = (y, x) >>> x 456 >>> y 123
3.標識符
①標識符只可包含字母、數字、下劃線,首字符不可爲數字
②定義字符時須避免python關鍵字和內建字符。python關鍵字以下圖:
③python用下劃線做爲變量前綴和後綴指定特殊變量,對解釋器有特殊意義,故建議避免用下劃線做爲變量名字符的開始
4.python基本風格
(1)綜述
①註釋是必要的,但須要注意不能過分註釋,如
x = 5 #對x賦值5
這裏的註釋就是沒必要要的,由於這是句廢話
②在模塊、類或函數聲明中第一個沒有賦值的字符串能夠用屬性obj.__doc__進行訪問,動態得到特殊字符串。obj是模塊、類或函數的名字
③良好的縮進風格是四個空格。若代碼須要運行在不一樣平臺上或用不一樣的編輯器打開,請避免用tab
③使用簡短而又意義豐富的標識符名稱
(2)模塊結構和佈局
①典型的python模塊結構,如圖
②除非必要,儘可能用局部變量代替全局變量
③除了真正須要執行的代碼,須要導入模塊時必須執行的代碼,幾乎全部功能代碼應該都封裝在函數或類裏等待主程序調用
④python檢測模塊是被導入仍是被直接運行,用__name__系統變量:
若是模塊是被導入,__name__的值爲模塊名字
若是模塊被直接執行,__name__的值爲"__main__"
5.內存管理
(1)變量定義
①python中,變量使用前無須聲明名字和類型,將在變量第一次賦值時自動聲明
②變量仍然須要在被建立和賦值後才能使用
③變量被賦值後。能夠經過變量名直接訪問
(2)引用計數
python使用"引用計數"來保持追蹤內存中的對象。一個內部跟蹤變量,稱爲一個引用計數器,每一個對象各有多少個引用,簡稱引用計數。對象的引用計數爲0時被看成垃圾回收。
①增長引用計數
當對象被建立時,就建立了一個引用計數;當對象被賦值給1個變量時,引用計數就增長1。
當同一個對象又被賦值給其餘變量,或者被做爲參數傳遞給函數,或做爲容器對象的一個元素時,對象的引用計數增長1。
x = 123 # 對象被建立並賦值,引用計數爲1 y = x #對象被引用給其餘變量,引用計數加1 float(x) #做爲參數傳遞給函數,引用計數加1 list1 = ['ab','c',x] #成爲容器的一個元素,引用計數加1
②減小引用計數
引用計數減小包括如下情形:
一個本地引用離開了做用範圍,這種狀況最常出如今函數運行結束時全部局部變量都被銷燬,對象的引用計數隨之減小;
變量被賦值給另一個對象時,原對象的引用計數自動減1:
foo = "xyz" #"xyz"被建立並被賦值,引用計數爲1 bar = foo #"xyz"被再次引用給其餘變量,引用計數增長1變成2 for = 123 #foo 被從新賦值給其餘對象,"xyz"引用計數自動減1又變爲1
一個本地引用離開其做用範圍時,好比函數結束時,引用計數減1
對象的別名被del顯式銷燬
del y # or del x
對象從一個容器對象中被移除
list1.remove(x)
容器對象自己被銷燬
del list1
6.python程序實例
makeTextFile.py
#!usr/bin/env python 'makeTextFile.py -- create text file' import os ls = os.linesep # get filename while True: fname = raw_input("Please enter the file name: ") if os.path.exists(fname): print "ERROR: %s already exists!" % fname else: break # get file content (text) lines all = [] print "\nEnter lines ('.' by itself to quit).\n" # loop until user terminates input while True: entry = raw_input("> ") if entry == '.': break else: all.append(entry) # write lines to file with proper line-ending fobj = open(fname, 'w') fobj.writelines(["%s%s" % (x, ls) for x in all]) fobj.close() print 'DONE!'
readTextFile
#!usr/bin/env python 'readTextFile.py -- read and display text file' # get filename fname = raw_input('Enter filename: ') print # attempt to open file for reading try: fobj = open(fname, 'r') except IOError, e: print "*** file open error: ", e else: # display contents to the screen for eachline in fobj: print eachline, fobj.close()
輸出:
Notes:
①堅持寫簡潔並有用的文檔字符串
②對於頻繁使用的模塊變量,儘可能使用本地變量來代替,如
ls = os.linesep
優勢是提高運行效率,並且能夠不用敲那麼長的變量名
③while-break語法
④os.path.exists()判斷一個文件是否存在,不存在返回 False,不然返回 True。
⑤try-except-else結構
結構:
try: pass #try子塊是但願檢測錯誤的代碼塊 except IOError,e: pass #except子塊對錯誤作出處理,當發生錯誤時執行此代碼塊 else: pass #else代碼塊在try子塊檢測無誤時執行