本文目錄一覽:
python代碼解讀
1 [… for i in range(0, 40, 8)] 是列表生成式,range(0, 40, 8)相當於是 [0, 8, 16, 24, 32],… 處對循環的 i 進行運算
2 str[i:i+8] 截取 str 字元串的 i到i+8的字元串(左閉右開)
3 int(…, 2) 將二進位類型字元串,轉換為10進位數
4 最後就是一個一堆10進位數的列表
例如
str = ‘0101011001011101110101011101101101101010111010101010101101011101’
[int(str[i:i+8], 2) for i in range(0, 40, 8)]
[86, 93, 213, 219, 106]
python代碼解釋
darray是要查找的字元串的集合
函數isInArray(array,line) 用於查找array中每個字元串是否在line中出現過
這個程序從命令行得到文件名,然後打開文件,查找darray中所包含的字元串在文件每一行是否出現,如果該行不包含darray中的字元串,則將該行寫入到 “原始文件名.result”文件中
with open(fname, ‘r’) as f: #打開文件
with open(fresult, ‘w’) as g: #打開儲存結果 的.result文件
for line in f.readlines(): #讀取文件每行
if not isInArray(darray, line): #如果該行不包含任何darray里的字元串
g.write(line) #將該行寫入.result文件
6 個值得玩味的 Python 代碼
先選取了 6 個自己認為值得玩味的 python代碼,希望對正在學習 python 的你有所幫助。
1、類有兩個方法,一個是 new,一個是 init,有什麼區別,哪個會先執行呢?
運行結果如下:
再來看另一個例子
運行結果如下:
這裡給出官方的解釋: init 作用是類實例進行初始化,第一個參數為 self,代表對象本身,可以沒有返回值。 new 則是返回一個新的類的實例,第一個參數是 cls 代表該類本身,必須有返回值。很明顯,類先實例化才能產能對象,顯然是 new 先執行,然後再 init ,實際上,只要 new 返回的是類本身的實例,它會自動調用 init 進行初始化。但是有例外,如果 new 返回的是其他類的實例,則它不會調用當前類的 init 。下面我們分別輸出下對象 a 和對象 b 的類型:
可以看出,a 是 test 類的一個對象,而 b 就是 object 的對象。
2、map 函數返回的對象
map()函數第一個參數是 fun,第二個參數是一般是 list,第三個參數可以寫 list,也可以不寫,作用就是對列表中 list 的每個元素順序調用函數 fun 。
有沒有發現,第二次輸出 b 中的元素時,發現變成空了。原因是 map() 函數返回的是一個迭代器,並用對返回結果使用了 yield,這樣做的目的在於節省內存。 舉個例子:
執行結果為:
這裡如果不用 yield,那麼在列表中的元素非常大時,將會全部裝入內存,這是非常浪費內存的,同時也會降低效率。
3、正則表達式中 compile 是否多此一舉?
比如現在有個需求,對於文本 中國 ,用正則匹配出標籤裡面的「中國」,其中 class 的類名是不確定的。有兩種方法,代碼如下:
這裡為什麼要用 compile 多寫兩行代碼呢? 原因是 compile 將正則表達式編譯成一個對象,加快速度,並重複使用。
4、[[1,2],[3,4],[5,6]]一行代碼展開該列表,得出[1,2,3,4,5,6]
5、一行代碼將字元串 “-” 插入到 “abcdefg”中每個字元的中間
這裡也建議多使用 os.path.join() 來拼接操作系統的文件路徑。
6、zip 函數
zip() 函數在運算時,會以一個或多個序列(可迭代對象)做為參數,返回一個元組的列表。同時將這些序列中並排的元素配對。zip() 參數可以接受任何類型的序列,同時也可以有兩個以上的參數;當傳入參數的長度不同時,zip 能自動以最短序列長度為準進行截取,獲得元組。
原創文章,作者:AAAXE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/324506.html