Python 程式碼閱讀合集介紹:為什麼不推薦Python初學者直接看專案原始碼

本篇閱讀的三份程式碼的功能分別是判斷列表中的元素是否都符合給定的條件;判斷列表中是否存在符合給定的條件的元素;以及判斷列表中的元素是否都不符合給定的條件。

本篇閱讀的程式碼片段來自於30-seconds-of-python。

every

def every(lst, fn=lambda x: x):
return all(map(fn, lst)) # EXAMPLES
every([4, 2, 3], lambda x: x > 1) # True
every([1, 2, 3]) # True

every用於判斷列表lst中的元素是否都符合給定的判斷條件fn

程式碼中首先使用map返回一個迭代器,該迭代器會將判斷條件fn應用於所有的列表元素上。然後使用all函式判斷迭代器中的元素是否都為True

all(iterable) 接收一個可迭代物件,如果這個物件中的所有元素都為True,則函式返回True。注意,當該物件為空時,也返回True。該函式等價於:

def all(iterable):
for element in iterable:
if not element:
return False
return True

some

def some(lst, fn=lambda x: x):
return any(map(fn, lst)) # EXAMPLES
some([0, 1, 2, 0], lambda x: x >= 2 ) # True
some([0, 0, 1, 0]) # True

some用於判斷列表lst列表中是否存在符合給定的條件fn的元素。

程式碼中首先使用map返回一個迭代器,該迭代器會將判斷條件fn應用於所有的列表元素上。然後使用any函式判斷迭代器中是否至少有一個元素為True

any(iterable) 接收一個可迭代物件,如果這個物件中有任一元素為True,則函式返回True。注意,當該物件為空時,返回False。該函式等價於:

def any(iterable):
for element in iterable:
if element:
return True
return False

none

def none(lst, fn=lambda x: x):
return all(not fn(x) for x in lst) # EXAMPLES
none([0, 1, 2, 0], lambda x: x >= 2 ) # False
none([0, 0, 0]) # True

none用於判斷列表lst中的元素是否都不符合給定的判斷條件fn

程式碼中首先使用生成器表示式生成一個生成器,該生成器會將判斷條件not fn應用於所有的列表元素上。然後使用all函式判斷迭代器中的元素是否都為True

lst = [0, 1, 2, 0]

def fn(x):
return x >= 2 type(not fn(x) for x in lst) # <class 'generator'>