實習生Python炫技卻被主管教育?原來是這樣!

2021-10-18 09:24:46 字數 3876 閱讀 6378

python 語言裡有許多(而且是越來越多)的高階特性,是 python 發燒友們非常喜歡的。在這些人的眼裡,能夠寫出那些一般開發者看不懂的高階特性,就是高手,就是大神。

但你要知道,在團隊合作裡,炫技是大忌。

為什麼這麼說呢?我說下自己的看法:

越簡潔的**,越清晰的邏輯,就越不容易出錯;

在團隊合作中,你的**不只有你在維護,降低別人的閱讀/理解**邏輯的成本是乙個良好的品德

簡單的**,只會用到最基本的語法糖,複雜的高階特性,會有更多的依賴(如語言的版本)

該篇是「炫技系列」的第二篇內容,在這個系列裡,我將總結盤點一下,我所見過的那些炫技操作。在這裡,如果你是 python 發燒友,你可以學到一些寫出超酷的**書寫技巧。同時,看了這些內容,對你在閱讀別人的**時,也許會有些幫助。

字典物件內建了乙個 update 方法,用於把另乙個字典更新到自己身上。

>>> profile = 

>>> ext_info = 

>>>

>>> profile.update(ext_info)

>>> print(profile)

如果想使用 update 這種最簡單、最地道原生的方法,但又不想更新到自己身上,而是生成乙個新的物件,那請使用深拷貝。

>>> profile = 

>>> ext_info = 

>>>

>>> from copy import deepcopy

>>>

>>> full_profile = deepcopy(profile)

>>> full_profile.update(ext_info)

>>>

>>> print(full_profile)

>>> print(profile)

使用**可以解包字典,解包完後再使用 dict 或者{}就可以合併。

>>> profile = 

>>> ext_info = 

>>>

>>> full_profile01 = 

>>> print(full_profile01)

>>>

>>> full_profile02 = dict(**profile, **ext_info)

>>> print(full_profile02)

若你不知道dict(**profile, **ext_info)做了啥,你可以將它等價於

>>> dict((("name", "xiaoming"), ("age", 27), ("gender", "male")))

在 python 裡有乙個非常強大的內建模組,它專門用於操作可迭代物件。

正好我們字典也是可迭代物件,自然就可以想到,可以使用itertools.chain()函式先將多個字典(可迭代物件)串聯起來,組成乙個更大的可迭代物件,然後再使用 dict 轉成字典。

>>> import itertools

>>>

>>> profile = 

>>> ext_info = 

>>>

>>>

>>> dict(itertools.chain(profile.items(), ext_info.items()))

如果可以引入乙個輔助包,那我就再提乙個,chainmap也可以達到和itertools同樣的效果。

>>> from collections import chainmap

>>>

>>> profile = 

>>> ext_info = 

>>>

>>> dict(chainmap(profile, ext_info))

使用 chainmap 有一點需要注意,當字典間有重複的鍵時,只會取第乙個值,排在後面的鍵值並不會更新掉前面的(使用 itertools 就不會有這個問題)。

>>> from collections import chainmap

>>>

>>> profile = 

>>> ext_info=

>>> dict(chainmap(profile, ext_info))

在 python 3.9 之前,其實就已經有|操作符了,只不過它通常用於對集合(set)取並集。

利用這一點,也可以將它用於字典的合併,只不過得繞個彎子,有點不好理解。

你得先利用items方法將 dict 轉成 dict_items,再對這兩個 dict_items 取並集,最後利用 dict 函式,轉成字典。

>>> profile = 

>>> ext_info = 

>>>

>>> full_profile = dict(profile.items() | ext_info.items())

>>> full_profile

當然了,你如果嫌這樣太麻煩,也可以簡單點,直接使用 list 函式再合併(示例為 python 3.x )

>>> profile = 

>>> ext_info = 

>>>

>>> dict(list(profile.items()) + list(ext_info.items()))

若你在 python 2.x 下,可以直接省去 list 函式。

>>> profile = 

>>> ext_info = 

>>>

>>> dict(profile.items() + ext_info.items())

python 裡對於生成列表、集合、字典,有一套非常 pythonnic 的寫法。

那就是列表解析式,集合解析式和字典解析式,通常是 python 發燒友的最愛,那麼今天的主題:字典合併,字典解析式還能否勝任呢?

當然可以,具體示例**如下:

>>> profile = 

>>> ext_info = 

>>>

>>> 

在 2 月份發布的 python 3.9.04a 版本中,新增了乙個抓眼球的新操作符操作符:|, pep584 將它稱之為合併操作符(union operator),用它可以很直觀地合併多個字典。

>>> profile = 

>>> ext_info = 

>>>

>>> profile | ext_info

>>>

>>> ext_info | profile

>>>

>>>

除了|操作符之外,還有另外乙個操作符|=,類似於原地更新。

>>> ext_info |= profile

>>> ext_info

>>>

>>>

>>> profile |= ext_info

>>> profile

看到這裡,有沒有漲姿勢了,學了這麼久的 python ,沒想到合併字典還有這麼多的方法。本篇文章的主旨,並不在於讓你全部掌握這 7 種合併字典的方法,實際上,你只要選用一種最順手的方式即可。

實習生招募

嘿,小夥伴們,ai領域領先 ai科技大本營招實習生啦!運營方向 1名 工作內容 能根據賬號的目前發展狀態,創造性地開展合作 互推 及活動策劃等運營方式。對團隊的整體進度負責,能細緻管理日常 的所有事務。謙虛,反應迅速,踏實靠譜坐得住,細緻,對工作無比的熱情,對自己絕對不將就式的成長要求,能根據團隊目...

實習生筆試

這幾天參加過幾場筆試。讓我對筆試有了新的認識。無論是前端,還是後端,最開始的筆試都只是乙個簡單的測試,測試你的邏輯思維能力,演算法能力。單項選擇題基本上是一些計算機的基礎題目,包括網路協議 http tcp ip 記憶體 暫存器。程式的設計。而程式設計題目是一些簡單的演算法題目,不會太難,但是反映的...

實習生筆試面試 騰訊2013實習生電話面試總結

總結下今天的電面,自我感覺不怎麼好,說出來和大家交流下!本人計算機小碩一枚,學渣乙個 面試官挺隨和的,問了下我名字,然後問我說話便否,接著說咱倆聊聊吧 偶趕緊找了個安靜偏僻的地方,做好審訊準備!面試官基本是對著簡歷問問題的,簡歷上寫什麼就問什麼。先是問的專案。說實話,自己主要做的只有乙個專案,然後也...