6 個值得玩味的 Python 代碼

先選取了 6 個自己認為值得玩味的 python代碼颂砸,希望對正在學習 python 的你有所幫助冤荆。

1辽话、類有兩個方法,一個是 new,一個是 init,有什么區(qū)別帆喇,哪個會先執(zhí)行呢警医?

class test(object):



    def __init__(self):



        print("test -> __init__")



    def __new__(cls):



        print("test ->__new__")



        return super().__new__(cls)





a = test()

運行結果如下:

test ->__new__



test -> __init__

再來看另一個例子

class test2(object):



    def __init__(self):



        print("test2 -> __init__")



 



    def __new__(cls):



        print("test2 ->__new__")



        return object()



 



b = test2()

運行結果如下:

test2 ->__new__

這里給出官方的解釋:init 作用是類實例進行初始化,第一個參數為 self坯钦,代表對象本身预皇,可以沒有返回值。new 則是返回一個新的類的實例婉刀,第一個參數是 cls 代表該類本身吟温,必須有返回值。很明顯突颊,類先實例化才能產能對象鲁豪,顯然是 new 先執(zhí)行,然后再 init律秃,實際上爬橡,只要 new 返回的是類本身的實例,它會自動調用 init 進行初始化友绝。但是有例外弃榨,如果 new 返回的是其他類的實例扮念,則它不會調用當前類的 init梁沧。下面我們分別輸出下對象 a 和對象 b 的類型:

print( type(a))



#<class '__main__.test'>

 


print( type(b))



#<class 'object'>

可以看出摔敛,a 是 test 類的一個對象,而 b 就是 object 的對象掷漱。

2粘室、map 函數返回的對象

map()函數第一個參數是 fun,第二個參數是一般是 list卜范,第三個參數可以寫 list衔统,也可以不寫,作用就是對列表中 list 的每個元素順序調用函數 fun 海雪。

>>> b=map(lambda x:x*x,[1,2,3])



>>> [i for i in b]



[1, 4, 9]



>>> [i for i in b]



[]



>>>

有沒有發(fā)現锦爵,第二次輸出 b 中的元素時,發(fā)現變成空了奥裸。原因是 map() 函數返回的是一個迭代器险掀,并用對返回結果使用了 yield,這樣做的目的在于節(jié)省內存湾宙。
舉個例子:

#encoding:UTF-8  



def yield_test(n):  



    for i in range(n):  



        yield call(i)  



    #做一些其它的事情      



 

def call(i):  



    return i*2  



 


#使用for循環(huán)  



x = yield_test(5)



print([i for i in x])



print([i for i in x])

執(zhí)行結果為:

[0, 2, 4, 6, 8]



 []

這里如果不用 yield樟氢,那么在列表中的元素非常大時冈绊,將會全部裝入內存,這是非常浪費內存的埠啃,同時也會降低效率死宣。

3、正則表達式中 compile 是否多此一舉碴开?

比如現在有個需求毅该,對于文本<div class="nam">中國</div>,用正則匹配出標簽里面的“中國”潦牛,其中 class 的類名是不確定的鹃骂。有兩種方法,代碼如下:

>>> import re


>>> text = '<div class="nam">中國</div>'



>>> #方法一



...



>>> re.findall('<div class=".*">(.*)</div>',text)



['中國']



>>> #方法二



...



>>> regex='<div class=".*">(.*)</div>'



>>> pattern = re.compile(regex)



>>> re.findall(pattern,text)



['中國']



>>>

這里為什么要用 compile 多寫兩行代碼呢罢绽? 原因是 compile 將正則表達式編譯成一個對象,加快速度静盅,并重復使用良价。

4、[[1,2],[3,4],[5,6]]一行代碼展開該列表蒿叠,得出[1,2,3,4,5,6]

>>> [j for i in [[1,2],[3,4],[5,6]] for j in i]



[1, 2, 3, 4, 5, 6]



>>>

5明垢、一行代碼將字符串 "->" 插入到 "abcdefg"中每個字符的中間

>>> "->".join("abcdef")



'a->b->c->d->e->f'



>>>

這里也建議多使用 os.path.join() 來拼接操作系統(tǒng)的文件路徑。

6市咽、zip 函數

zip() 函數在運算時痊银,會以一個或多個序列(可迭代對象)做為參數,返回一個元組的列表施绎。同時將這些序列中并排的元素配對溯革。zip() 參數可以接受任何類型的序列,同時也可以有兩個以上的參數;當傳入參數的長度不同時谷醉,zip 能自動以最短序列長度為準進行截取致稀,獲得元組。

>>> a=[1,2]



>>> b=(3,4)



>>> zip(a,b)



<zip object at 0x000001A20201AA08>



>>> for i in zip(a,b):



...     print(i)



...



(1, 3)



(2, 4)



>>> a="ab"



>>> b="xyz"



>>> for i in zip(a,b):



...     print(i)



...



('a', 'x')



('b', 'y')

本次分享就到這啦俱尼,看到點個贊再走吧

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末抖单,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子遇八,更是在濱河造成了極大的恐慌矛绘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刃永,死亡現場離奇詭異货矮,居然都是意外死亡,警方通過查閱死者的電腦和手機揽碘,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門次屠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來园匹,“玉大人,你說我怎么就攤上這事劫灶÷阄ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵本昏,是天一觀的道長供汛。 經常有香客問我,道長涌穆,這世上最難降的妖魔是什么怔昨? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宿稀,結果婚禮上趁舀,老公的妹妹穿的比我還像新娘。我一直安慰自己祝沸,他們只是感情好矮烹,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罩锐,像睡著了一般奉狈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涩惑,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天仁期,我揣著相機與錄音,去河邊找鬼竭恬。 笑死跛蛋,一個胖子當著我的面吹牛,可吹牛的內容都是我干的痊硕。 我是一名探鬼主播问芬,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寿桨!你這毒婦竟也來了此衅?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亭螟,失蹤者是張志新(化名)和其女友劉穎挡鞍,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體预烙,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡墨微,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了扁掸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘县。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡最域,死狀恐怖,靈堂內的尸體忽然破棺而出锈麸,到底是詐尸還是另有隱情镀脂,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布忘伞,位于F島的核電站薄翅,受9級特大地震影響,放射性物質發(fā)生泄漏氓奈。R本人自食惡果不足惜翘魄,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舀奶。 院中可真熱鬧暑竟,春花似錦、人聲如沸育勺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀大。三九已至,卻和暖如春呀闻,著一層夾襖步出監(jiān)牢的瞬間化借,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工捡多, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蓖康,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓垒手,卻偏偏與公主長得像蒜焊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子科贬,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容