Python 程式碼閱讀合集介紹:為什麼不推薦Python初學者直接看專案原始碼
本篇閱讀的程式碼實現了根據給定的謂詞函式和屬性字串,來構造一個判別函式,用來判斷字典物件中相應的屬性是否滿足謂詞函式中的條件。
本篇閱讀的程式碼片段來自於30-seconds-of-python。
check_prop
def check_prop(fn, prop):
return lambda obj: fn(obj[prop])
# EXAMPLES
check_age = check_prop(lambda x: x >= 18, 'age')
user = {'name': 'Mark', 'age': 18}
check_age(user) # True
check_prop
函式接收一個謂詞函式fn
和屬性字串prop
,返回一個判別函式。使用該判別函式,可以對字典物件的屬性進行判斷。
check_prop
接收一個謂詞函式fn
,在check_prop
內部構造了一個匿名函式。該匿名函式的入參是obj
(待判別的字典物件)。該匿名函式使用obj[prop]
呼叫謂詞函式fn
,判斷obj
物件的屬性prop
是否滿足特定的條件。最後check_prop
函式返回這個匿名函式。
lambda
表示式
形如lambda parameters: expression
這樣的lambda
表示式,會產生一個函式物件 。 該未命名物件的行為類似於用以下方式定義的函式:
def <lambda>(parameters):
return expression
因此check_prop
函式可以改寫成如下的形式:
def check_prop(fn, prop):
def anonymous1(obj):
return fn(obj[prop])
return anonymous1
lambda x: x >= 18, 'age'
可以寫成如下的匿名函式:
def anonymous2(x):
return x >= 18
因此從check_prop(lambda x: x >= 18, 'age')
返回的匿名函式如下:
def anonymous3(obj):
return obj['age'] >= 18
check_age
指向該匿名函式。check_age(user)
將判斷user
物件中的age
屬性是否大於等於18
。