据我了解,Python lambda 只允许表达式,而不是语句。我有一个案例,我len()
在 lambda 表达式中使用并试图获取函数调用的返回值的长度。但是,该函数调用有可能返回None
,这会中断len()
。有没有一种优雅的方式来解决这个问题?
例子:
def foo(obj_list, field):
return maxk(obj_list, key=lambda obj: len(nested_getattr(obj, field)))
在上面,maxk()
是一个max()
接受key
参数的版本。我在 Python 2.4 上(目前不能使用更高版本),所以我有一个自定义实现,max()
它需要一个关键参数,来自这里(请参阅帖子 #140122 和 #140143)。 nested_getattr()
是另一个效用函数,其作用类似于getattr()
但可以获取嵌套在另一个属性中的属性。这可以从这里获得。
示例函数的作用(这是我使用更改变量/名称的实际函数)是通过对象列表 ( obj_list
) 并比较值的长度field
并返回列表field
中总体最大的对象。
但是,如果field
为每个对象指定的属性返回None
,那么len()
将被 阻塞TypeError
。我想我可以使用内联条件来解决这个问题,但是我必须调用nested_getattr()
两次,一次进行检查,如果返回值不是,则可能再调用一次None
。我宁愿将它的返回值缓存到一个变量中,并在决定返回什么之前有条件地运行它(或者只是让生成器表达式完全跳过它)。
有什么好的方法来处理这个?我对这个函数的其他实现持开放态度maxk()
,或者nested_getattr()
(如果需要)。