摘自《簡明python教程》
python中所有的類成員(包括資料成員)都是 公共的 ,所有的方法都是 有效的 。
只有乙個例外:如果你使用的資料成員名稱以 雙下劃線字首 比如__privatevar,python的名稱管理體系會有效地把它作為私有變數。
13.檔案
首先,我們通過指明我們希望開啟的檔案和模式來建立乙個file類的例項。模式可以為讀模式(『r』)、寫模式(『w』)或追加模式(『a』)。事實上還有多得多的模式可以使用,你可以使用help(file)來了解它們的詳情。
我們首先用寫模式開啟檔案,然後使用file類的write方法來寫檔案,最後我們用close關閉這個檔案。
接下來,我們再一次開啟同乙個檔案來讀檔案。如果我們沒有指定模式,讀模式會作為預設的模式。在乙個迴圈中,我們使用readline方法讀檔案的每一行。這個方法返回包括行末換行符的乙個完整行。所以,當乙個 空的 字串被返回的時候,即表示檔案末已經到達了,於是我們停止迴圈。
注意,因為從檔案讀到的內容已經以換行符結尾,所以我們在print語句上使用逗號來消除自動換行。最後,我們用close關閉這個檔案。
14.儲存
為了在檔案裡儲存乙個物件,首先以寫模式開啟乙個file物件,然後呼叫儲存器模組的dump函式,把物件儲存到開啟的檔案中。這個過程稱為 儲存 。
接下來,我們使用pickle模組的load函式的返回來取回物件。這個過程稱為 取儲存 。
15.異常
try-except
我們把所有可能引發錯誤的語句放在try塊中,然後在except從句/塊中處理所有的錯誤和異常。except從句可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤/異常。如果沒有給出錯誤或異常的名稱,它會處理 所有的 錯誤和異常。對於每個try從句,至少都有乙個相關聯的except從句。
如果某個錯誤或異常沒有被處理,預設的python處理器就會被呼叫。它會終止程式的執行,並且列印乙個訊息,我們已經看到了這樣的處理。
你還可以讓try…catch塊關聯上乙個else從句。當沒有異常發生的時候,else從句將被執行。
我們還可以得到異常物件,從而獲取更多有個這個異常的資訊。這會在下乙個例子中說明。
try…finally
假如你在讀乙個檔案的時候,希望在無論異常發生與否的情況下都關閉檔案,該怎麼做呢?這可以使用finally塊來完成。注意,在乙個try塊下,你可以同時使用except從句和finally塊。如果你要同時使用它們的話,需要把乙個嵌入另外乙個。
os模組
這個模組包含普遍的作業系統功能。如果你希望你的程式能夠與平台無關的話,這個模組是尤為重要的。即它允許乙個程式在編寫後不需要任何改動,也不會發生任何問題,就可以在linux和windows下執行。乙個例子就是使用os.sep可以取代作業系統特定的路徑分割符。
下面列出了一些在os模組中比較有用的部分。它們中的大多數都簡單明瞭。
os.name字串指示你正在使用的平台。比如對於windows,它是』nt』,而對於linux/unix使用者,它是』posix』。
os.getcwd()函式得到當前工作目錄,即當前python指令碼工作的目錄路徑。
os.getenv()和os.putenv()函式分別用來讀取和設定環境變數。
os.listdir()返回指定目錄下的所有檔案和目錄名。
os.remove()函式用來刪除乙個檔案。
os.system()函式用來執行shell命令。
os.linesep字串給出當前平台使用的行終止符。例如,windows使用』\r\n』,linux使用』\n』而mac使用』\r』。
os.path.split()函式返回乙個路徑的目錄名和檔名。
os.path.isfile()和os.path.isdir()函式分別檢驗給出的路徑是乙個檔案還是目錄。類似地,os.path.existe()函式用來檢驗給出的路徑是否真地存在。
你可以利用python標準文件去探索更多有關這些函式和變數的詳細知識。你也可以使用help(sys)等等。
一些特殊的方法 名稱
說明init(self,…)
這個方法在新建物件恰好要被返回使用之前被呼叫。
del(self)
恰好在物件要被刪除之前呼叫。
str(self)
在我們對物件使用print語句或是使用str()的時候呼叫。
lt(self,other)
當使用 小於 運算子(<)的時候呼叫。類似地,對於所有的運算子(+,>等等)都有特殊的方法。
getitem(self,key)
使用x[key]索引操作符的時候呼叫。
len(self)
對序列物件使用內建的len()函式的時候呼叫。
18.列表綜合
通過列表綜合,可以從乙個已有的列表匯出乙個新的列表。例如,你有乙個數的列表,而你想要得到乙個對應的列表,使其中所有大於2的數都是原來的2倍。對於這種應用,列表綜合是最理想的方法。
`python
listone =[2
,3,4
]listtwo =[2
*i for i in listone if i >2]
print listtwo
```python
$ python list_comprehension.py
[6, 8]
這裡我們為滿足條件(if i > 2)的數指定了乙個操作(2*i),從而匯出乙個新的列表。注意原來的列表並沒有發生變化。在很多時候,我們都是使用迴圈來處理列表中的每乙個元素,而使用列表綜合可以用一種更加精確、簡潔、清楚的方法完成相同的工作。
19.在函式中接收元組和列表
當要使函式接收元組或字典形式的引數的時候,有一種特殊的方法,它分別使用*和**字首。這種方法在函式需要獲取可變數量的引數的時候特別有用。
>>
>
defpowersum
(power,
*args):.
..'''return the sum of each argument raised to specified power.'''..
. total =0.
..for i in args:..
. total +=
pow(i, power)..
.return total..
.>>
> powersum(2,
3,4)
25>>
> powersum(2,
10)100
由於在args變數前有*字首,所有多餘的函式引數都會作為乙個元組儲存在args中。如果使用的是**字首,多餘的引數則會被認為是乙個字典的鍵/值對。
20.lambda形式
lambda語句被用來建立新的函式物件,並且在執行時返回它們。
它如何工作
這裡,我們使用了make_repeater函式在執行時建立新的函式物件,並且返回它。lambda語句用來建立函式物件。本質上,lambda需要乙個引數,後面僅跟單個表示式作為函式體,而表示式的值被這個新建的函式返回。注意,即便是print語句也不能用在lambda形式中,只能使用表示式。
#!/usr/bin/python
# filename: lambda.py
defmake_repeater
(n):
return
lambda s: s*n
twice = make_repeater(2)
print twice(
'word'
)print twice(
5)
$ python lambda
.pywordword
10
exec和eval語句
exec語句用來執行儲存在字串或檔案中的python語句。例如,我們可以在執行時生成乙個包含python**的字串,然後使用exec語句執行這些語句。下面是乙個簡單的例子。
>>
>
exec
'print "hello world"'
hello world
21.assert語句
assert語句用來宣告某個條件是真的。例如,如果你非常確信某個你使用的列表中至少有乙個元素,而你想要檢驗這一點,並且在它非真的時候引發乙個錯誤,那麼assert語句是應用在這種情形下的理想語句。當assert語句失敗的時候,會引發乙個assertionerror。
22.repr函式
repr函式用來取得物件的規範字串表示。反引號(也稱轉換符)可以完成相同的功能。注意,在大多數時候有eval(repr(object)) == object。
>>
> i =
>>
'item'
)>>
> `i`
"['item']"
>>
>
repr
(i)"['item']"
mcu部分基礎知識
1.mcu串列埠外設加上電平轉換晶元,如max232,sp3485就是rs232,rs485介面了。2.rs485採用差分負邏輯,2 6v表示0,2 6v表示1。有兩線制和四線制兩種接線,四線制是全雙工通訊方式,兩線制是半雙工通訊方式。rs485一般採用的是主從通訊方式,即乙個主機帶多個從機。3.m...
網路基礎知識(部分)
私有ip位址 10.0.0.0 10.255.255.255 172.16.0.0 172.16.255.255 192.168.0.0 192.168.255.255 ipv4報頭 udpudp 使用者資料報文協議。非面向連線的不保證可靠的傳輸協議。僅完成傳輸層基本工作 分段 埠號。udp報頭 t...
基礎知識 網路部分
rarp協議根據mac位址查詢對應的ip位址nat協議把公網的ip位址轉換為私網的ip位址icmp協議用於控制資料報傳送中的差錯情況dhcp協議集中管理網路中的ip位址分配 192.168.0.0 24 後面的24代表用cidr表示的子網掩碼,即有24位是1,即是255.255.255.0 若要劃分...