python核心編程-第三章-我的筆記

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子塊檢測無誤時執行
相關文章
相關標籤/搜索