在Python中發(fā)現(xiàn)新的函數是作者的一大愛好。每當遇到別人沒有注意到的功能,我都會饒有興趣的記錄下來。
沒有,這幾個星期我學了一些有趣的函數,比如StackOverflow上的一些我不知道的函數。這些被低估被埋沒的實用功能真的很值得擁有!
divmod這個函數很有用,可以對兩個數進行模除%運算,然后返回商和余數。例如:
divmod(5, 2)[Out]: (2, 1)這只是為了找到我們能適應2到5的次數。我們不需要拆分這個數,我們可以得到商是2,1是余數。它對于計算返回過程運行所需的時間(以小時、分鐘和秒為單位)特別有用,如下所示:
start =datetime.datetime.now() ... # process code goes hereend =datetime.datetime.now()# we get the total runtime in secondsruntime = (end - start).seconds # wewill assume 30000# how many hours are in these secs, what are the remainingsecs?hours, remainder = divmod(runtime, 3600)# now how many minutes and seconds arein our remainder?mins, secs = divmod(remainder,60)print("{:02d}:{:02d}:{:02d}".format(hours, mins, secs))[Out]: "08:00:08"casefold這是一個特別有趣的字符串方法,功能類似于lower。但是casefold試圖更積極地標準化更廣泛的字符。在大多數情況下,lower和casefold的行為是相同的,但有時它們是不同的:
"?".casefold() # both ? and σ are the Greek letter sigma[Out]:"σ"相反,使用較低的:
"?".lower() # however, lower recognizes them as different[Out]:"?"[Out]: False在這里,兩個sigma都已經小寫了。根據使用情況,它可能會按預期運行。但是,如果你打算比較兩個等價的希臘語單詞,一個用σ,一個用σ。雖然它們是相同的,但只有casefold能讓我們準確地比較它們:
"?ρμ?σ"== "?ρμ??"[Out]:False"?ρμη?σ".lower() == "?ρμη??".lower()[Out]:False"?ρμ?σ".casefold() == "?ρμ??".casefold()[Out]:True*args, **kwargs有時你可能會看到函數定義包含這兩個參數,比如def func(x,y,* args,** kwargs)。
它們都非常簡單,都允許我們將多個值傳遞給一個函數,然后將它們打包成一個生成器。至于是否將列表/生成器傳遞給標準參數,結果如下:
def func(values):for x in values:print(x, end=" ")func([1,2, 3])[Out]: 1 2 3當使用* args時,我們應該將每個值作為新參數傳遞,而不是將它們都包含在列表中。
def func(*values):for x in values:print(x, end=" ")func(1,2, 3)[Out]: 1 2 3請注意,您不需要輸入* args,只需輸入*值。因為只有一個星號*,所以它被定義為* args,與所使用的變量名無關。* args只是基于傳遞給函數的參數創(chuàng)建一個生成器對象。** kwargs創(chuàng)建字典。
因此,您可以按如下方式使用名稱和關鍵字參數:
def func(**values):for x in values:print(f"{x}:{values[x]}")func(x=1, y=2, z=3)[Out]: x: 1y: 2z: 3同樣,可以隨意調用變量。在這種情況下,使用**值。用雙引號定義為**kwargs。
圖源:unsplash資料來源:unsplash
需要理解列表中的表達式,這絕對是Python最有用的功能之一。最常見的是列表理解,大部分人都見過以下幾種: vals = [1, 2, 3, 4, 5][i**2 fori in vals][Out]: [1, 4, 9, 16, 25]但是,您不僅可以使用方括號,還可以用幾乎相同的語法定義生成器表達式:
(i**2 for i in vals)[Out]: <generator object<genexpr> at 0x7f0281730fc0>當然,生成器中的每個元素只有在被調用時才輸出。我們可以使用list()來實現(xiàn)這一點:
list((i**2 for i in vals))[Out]: [1, 4, 9, 16, 25]只需在語法上做一點小小的改動,甚至用字典理解來構建字典:
{i: i**2 for i in vals}[Out]:{1: 1,2: 4,3: 9,4: 16,5: 25}這些都是很有意思的功能,特別是divmod和casefold,我最近體驗過,一定要試試。
【聲明】本文版權歸原作者所有,內容為作者個人觀點。轉載的目的是為了傳遞更多的信息。如果涉及到作品的內容和版權,可以聯(lián)系本網站刪除。謝謝你。
更多信息請關注微信微信官方賬號:成都CDA數據分析師。
1.《divmod 這些鮮為人知的Python功能,你值得擁有!》援引自互聯(lián)網,旨在傳遞更多網絡信息知識,僅代表作者本人觀點,與本網站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《divmod 這些鮮為人知的Python功能,你值得擁有!》僅供讀者參考,本網站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/junshi/1110505.html