Python3:可以使用命名函数定义进行列表理解吗?

问题描述 投票:0回答:1

我正在使用html-requests库,但特定于库的知识在此问题中没有多大关系

results = asession.run(*[lambda m=j: get_size(m) for j in i])

[asession.run(f1, f2, f3, ...)异步运行f1()f2()f3(),依此类推,返回[f3(), f1(), f2()](返回的列表顺序有所不同)

问题是,我的get_size函数可能会引发错误。

所以我想设置一些备用值。但是,使用lambda表达式时,无法插入try-except块。 (lambda函数仅允许在:之后的返回值,而不是表达式)

代替

[lambda m=j: get_size(m) for j in i]

以下类型的代码是否不可能? (当然,以下代码在语法上是错误的)

[def fn(m=j): try: return get_size(m) except: return 0 for j in i]

以下是唯一的方法吗?

def fn(m):
    try:
        return get_size(m)
    except:
        return 0
[lambda m=j: fn(m) for j in i]

在我的情况下,我喜欢一些单行列表推导,并且想知道在列表推导中是否可以使用命名函数定义(lambda之外的任何东西,因为lambda只允许返回值,因此受到限制)。

python list-comprehension
1个回答
1
投票

如果知道m的值是什么导致错误(例如len(m)为0),即Condition,那么您可以像这样使用lambda表达式

f = lambda m : get_size(m) if not Condition else 0
[f(j) for j in i]
© www.soinside.com 2019 - 2024. All rights reserved.