1.特殊變數"name"
我們可以在我們的python檔案中加入如下**,以方便進行單元測試。
def unit_test():print("this is a unit test!")
if __name__ == "__main__":
unit_test()
當python檢測到乙個程式檔案正在被直譯器執行而不是作為乙個被匯入的模組,它會把特殊變數__name__(兩邊為雙下劃線)設定為"__main__"。這意味著任何在if**塊內的**只有在這種情況下才會被執行:指令碼作為主程式執行而不是作為被另乙個程式匯入的檔案。如果這個檔案本來只是想被用作模組的話,unit_test()函式可以用來進行單元測試。
2.enumerate
這是乙個在for迴圈中經常使用的函式。這個函式返回包含迭代物件和乙個序列數的元組。在預設情況下,序列數等同於列表的下標。enumerate接受第二個可選的引數,這個引數指定了序列開始的數字,可以使用這個引數來使檔案中的行數從1而不是從預設的0開始。
for number,line inenumerate(open("file.py")):
print(number,'
\t',line)
3.生成器表示式
列表推導是一種更一般的迴圈形式的特定應用。這種迴圈形式被稱為生成器表示式。
使用生成器表示式把1~10的偶數的平方填充進了列表。
( n*n for n in range(1,11) if not n*n % 2)
關於生成器表示式,有一點特別重要的是它們並不是一次就生成所有資料。更確切地說,它們根據需要來生成(由此得名)資料項。這樣當處理大型資料時,它們可以極大地節省記憶體資源。
4.上下文管理
python有乙個執行時上下文的概念。它通常包括乙個臨時性的資源。這個資源就是你的程式想要互動的一些東西。乙個常見的示例可能是開啟乙個檔案或乙個併發執行的執行緒。為了處理這個,python使用了關鍵字with和乙個上下文管理器協議。這個協議幫助你定義你自己的上下文管理器類,但是你在大部分情況下還是會使用python提供的管理器。
你通過with語句來使用乙個上下文管理器:
with上下文管理器保證檔案在使用後被關閉。上下文管理器可以避免使用try/finally結構。contextlib模組為構建你自己的上下文管理器提供了支援。open("name_test.py","r") as tmp_file:
print(tmp_file)
5.文件字串
python程式設計師經常在他們的程式中使用文件字串。文件字串就是字串字面值,它們沒有被賦值給變數,而且遵循在它們被定義地方的縮排級別。可以用文件字串來描述函式,類或者模組。help()函式會讀取並展示這些文件字串。
6.生成器函式
生成器函式與標籤函式看起來幾乎一樣。除了標準函式使用return返回資料,而生成器函式使用關鍵字yield。
python優雅的魔力使生成器函式很特殊。它們像定格相機一樣工作。當乙個標準函式遇到return語句時,它會返回值,然後函式就會丟棄它的所有內部資料。當下次函式呼叫時,一切從頭開始。
yield語句會做不同的事。它也會像return一樣返回乙個值,但是它不會使函式丟棄資料。相反,所有資料都被儲存起來了。下次函式呼叫時,即使yield語句在**塊的中間或者處於迴圈中,程式也會從yield語句開始執行。
下面的示例返回乙個遞增的奇數序列:
def odds(start=1):python確保生成器函式能夠變成迭代器,這樣就可以在for迴圈中使用它們。這樣把odds()當成乙個集合在使用。每次迴圈訪問它,它會呼叫生成器函式,然後接收下乙個奇數值。通過插入break,可以避免乙個無限迴圈。if int(start) % 2 == 0: start = int(start)+1
while true:
yield start
start += 2
for n in odds():
if n > 7:break
else: print(n)
前面介紹的生成器表示式就是高效的匿名生成器函式。生成器表示式實際上是一種變相的沒有名稱的生成器函式。
7.lambda函式
lambda來自於微積分。lambda函式背後的原理是它通常是乙個小的匿名函式塊。可以把它插入到**中,然後像乙個普通函式一樣呼叫lambda函式。
lambda函式的定義如下所示:
lambda :
straight_line = lambda m,x,c:m*x+cprint(straight_line(2,4,-3))
它們就是用來簡明地表達那種簡短的單行表示式的函式。
python一些小知識
1 python連線mssql資料庫編碼問題 python一直對中文支援的不好,最近老遇到編碼問題,而且幾乎沒有通用的方案來解決這個問題,但是對常見的方法都試過之後,發現還是可以解決的,下面總結了常用的支援中文的編碼問題 這些方法中可能其中乙個就能解決問題,也可能是多個組合 1 首先,要保證檔案的開...
一些小知識
1.答 int elev 10 0.5 10 3答 arctoolbox中有直接的工具!data management tools features feature to polygon 4如何用arcgis實現指定範圍的dem水平切面 主要是想實現dem和水面結合的三維效果 但如何計算水面範圍 答...
python模組的一些小知識
模組是包含函式和其他語句的python指令碼檔案以 py 為字尾名,和我們平常所寫的python指令碼並沒有什麼區別 在python中可以使用以下三種方式匯入模組或模組中的函式 1 import 模組名 import math 入導math模組 math.floor 呼叫math模組中的floor ...