据我了解,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()(如果需要)。