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
劣纲。