Python部分基礎知識

2021-10-04 02:13:18 字數 4579 閱讀 4368

摘自《簡明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 若要劃分...