Python list() 函数更新以接受不可迭代?

Python list() function update to accept a non-iterable?

我一直在研究 "learning project",它涉及几个简短的单参数函数,其中参数可能是数字类型或数字列表。例如,

def magnitude_of(v):
    try:
        return math.sqrt(sum([vi**2 for vi in v]))
    except:
        return abs(v)

这当然是必要的,因为如果我这样做:

def magnitude_of(v):
    return math.sqrt(sum([vi**2 for vi in list(v)]))

...代码会失败,因为 list() 只接受一个可迭代对象作为参数。

我的问题是:PSW 是否考虑过让 list() 处理任何参数?如果是,是什么阻止了更改的实施?

我会创建自己的列表函数并将其用于此特定目的。

例如:

def mlist(v):
    try:
        return list(v)
    except(TypeError):
        return [v]

现在您使用 mlist 而不是 list

l1 = mlist(1)
l2 = mlist([1])

两者都会给出 [1] 作为结果

我无法评论这是否出现在 PSW 上,但我通常更喜欢在这里使用三元而不是 try...catch 例如

def magnitude_of(v):
    return math.sqrt(sum([vi*vi for vi in (v if isinstance(v,list) else [v])]))

当然,正如其他人所提到的,如果该函数只需要传递一个列表,那可能是最好的