三個節(jié)省時間的 Python 技巧!
我最近的工作內(nèi)容:自動移動文件、圖像處理和數(shù)據(jù)清理。在編程過程中總結(jié)了一些Python技巧,使得我的代碼既整潔,又易于理解。接下來,我給大家分享3個節(jié)省時間的 Python 技巧。
反轉(zhuǎn)列表
我最近有個項目,需要去反轉(zhuǎn)列表,一開始是通過切片來完成。但其實使用內(nèi)置函數(shù)reverse()方法,也可以反轉(zhuǎn)python中的列表。
先從創(chuàng)建一個列表開始。
# 創(chuàng)建一個列表
mylist = list(np.arange(0,100))
反轉(zhuǎn)列表的兩種方法是:
# 使用切片反轉(zhuǎn)列表
newlist = mylist[::-1]
# 使用內(nèi)置的 reverse() 反轉(zhuǎn)列表
mylist.reverse()
兩種方法都可以反轉(zhuǎn)列表,但需要注意的是,內(nèi)置函數(shù)reverse()會更改原始列表,切片方法是創(chuàng)建一個新列表。
我們再對比一下執(zhí)行時間?
reverse() 和列表切片的執(zhí)行時間
顯然,內(nèi)置函數(shù)reverse()比列表切片的方法快3倍!
在我的工作項目中,為了實現(xiàn)系統(tǒng)文件的自動移動,我創(chuàng)建了一個位置值的列表。早期的Python程序是使用列表切片編寫的,現(xiàn)在我重新編寫了代碼,用reverse()函數(shù)使得程序的更快執(zhí)行。
好了,下面介紹第二個技巧。
使用一行代碼交換兩個值
使用一行代碼交換兩個變量值是一種真正的 Pythonic 方式。
與其他編程語言不同,Python 無需使用臨時變量來交換兩個數(shù)字或值。舉一個簡單的例子:
# 創(chuàng)建兩個變量
variable_1 = 100
variable_2 = 500
要交換 variable_1 和 variable_2 的值,您只需使用一行代碼即可。
變量_2,變量_1 = 變量_1,變量_2
使用一行代碼交換兩個值,簡化也就是下面這種形式。
當然,我的實際工作項目比這復(fù)雜一點,要用到一個字典,每個鍵都有一個列表作為值。
md[key_2],md[key_1] = md[key_1],md[key_2]
通過上面的技巧,使我的工作節(jié)省了多次迭代和復(fù)雜的數(shù)據(jù)轉(zhuǎn)換,減少了執(zhí)行時間。
在函數(shù)內(nèi)使用 for 循環(huán)
我們都喜歡創(chuàng)建自定義的函數(shù),以執(zhí)行自己的特定任務(wù)。然后再搭配 for 循環(huán)迭代這些函數(shù),多次重復(fù)執(zhí)行任務(wù)。
但是,在 for 循環(huán)中使用函數(shù)需要更長的執(zhí)行時間,因為每次迭代都會調(diào)用該函數(shù)。
相反,如果 for 循環(huán)是在函數(shù)內(nèi)部實現(xiàn)的,那么該函數(shù)只會被調(diào)用一次。
為了解釋得更清楚,還是舉個例子吧!
先創(chuàng)建一個簡單的字符串列表:
listofstrings = ['蘋果','橙子','香蕉','菠蘿','葡萄']
創(chuàng)建兩個函數(shù),for 循環(huán)分別在函數(shù)內(nèi)外,從簡單的一個開始。
# 在函數(shù)內(nèi)部創(chuàng)建一個沒有for循環(huán)的函數(shù)
def onlyfunction(x):
newstring = x.capitalize()
outputstring = x + " " + newstring
print(outputstring)
以及一個for內(nèi)部帶有循環(huán)的函數(shù)。
# 創(chuàng)建一個函數(shù),其中 for 循環(huán)在函數(shù)內(nèi)部
def forinfunction(listofstrings):
for x in listofstrings:
newstring = x.capitalize()
outputstring = x + " " + newstring
print(outputstring)
讓我們使用這些函數(shù)并查看輸出。
顯而易見,兩個函數(shù)的輸出的結(jié)果是相同的。
但是,故事并沒有到此結(jié)束。咱們對比一下,哪個更快?
可以看到,在函數(shù)內(nèi)部使用 for 循環(huán)要稍微快一些。
在我的另一項目中,需要處理許多復(fù)雜的圖像處理任務(wù)。相對比之下,在函數(shù)內(nèi)部使用 for 循環(huán)比在每次迭代中調(diào)用相同函數(shù)快 1.5 倍。當然,這些只是我的個人經(jīng)驗,但如果你們也遇到了類似情況下,應(yīng)該也會有用。
總而言之,大家可以多多使用 Python 的內(nèi)置函數(shù)。來提高自己的Python程序速度,同時還能保持代碼簡潔易懂。
如果大家想了解更過Python的內(nèi)置函數(shù),可以參考下表,也可以查看下方網(wǎng)站:
?https://docs.python.org/3/library/functions.html?