全文共1657字,預計學習時長3分鐘
圖片來源:Drew Beamer/Unsplash
Python其實也可以帶來很多樂趣。重新審視一些一開始並不被人們熟知的內置函數並沒有想象中那麼難,但為什麼要這麼做呢?今天,本文就來仔細分析3個在日常工作中或多或少都會用到、但是大部分時間都被忽略的Python函數。
雖然它們可能不會節省大量的時間(如果瞭解了背後的具體邏輯),但是會使代碼看起來更簡潔明瞭。也許這聽起來沒什麼大不了的,但長久來看,可以使讀者受益匪淺。從第一個函數開始吧!
1. map()
map()是一個內置的Python函數,用於將一個函數應用於元素序列(如列表或字典)。它可能是進行數據操作的最簡單易讀的方法。
下面的示例旨在求出列表中數字的平方數。首先,必須明確所使用的函數。接下來,筆者展示並對比了使用map()和不使用map()的方法,即python和非python的方法。
nums = [1, 2, 3, 4, 5]#
this function will calculate square
def square_num(x):
return x**2
# non-pythonic approach
squares = []
for num in nums:
squares.append(square_num(num))
print('Non-Pythonic Approach: ', squares)
# pythonic approach
x = map(square_num, nums)
print('Pythonic Approach: ', list(x))
輸出本質上是相同的,但python方法明顯更加簡潔,過程也不需要循環。
2. zip ()
zip()是筆者最中意使用的函數之一。它允許用戶同時迭代兩個或多個列表。這個功能在處理日期和時間問題時都十分有用。
例如,如果每天在工作中使用它的話,當用戶就有第一個屬性時表示該事件的開始時間,當有第二個屬性時表示該事件的結束時間。進一步想想,工作中總是需要計算事件之間的時間差的,而zip是迄今為止最簡單的實現方法。
範例中創建了兩個包含數字的列表,任務是對相應的元素求和:
first = [1, 3, 8, 4, 9]
second = [2, 2, 7, 5, 8]
# Iterate over two or more list at the same time
for x, y in zip(first, second):
print(x + y)
這樣既簡單又幹淨。
3. filter()
filter()函數在某種程度上類似於map()函數——也是將一個函數應用於某個序列,不同之處在於filter()只返回值為True的元素。
在如下的示例中,筆者創建了一個任意數字列表和一個函數,如果該數字是偶數,該函數將返回到True。同樣,筆者將演示如何以非python和python方式執行該操作。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Will return true if input number is even
def even(x):
return x % 2 == 0
# non-pythonic approach
even_nums = []
for num in numbers:
if even(num):
even_nums.append(num)
print('Non-Pythonic Approach: ', even_nums)
# pythonic approach
even_n = filter(even, numbers)
print('Pythonic Approach: ', list(even_n))
同樣,python方法更簡潔、更可讀——這是讀者學會後會終身受益的東西。
我們一起分享AI學習與發展的乾貨