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'>