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

时间:2018-03-09 17:09:10

标签: python language-design

我一直致力于一个学习项目"它涉及几个简短的单参数函数,其中参数可以是数字类型或数字列表。如,

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()只接受一个iterable作为参数。

我的问题是:PSW是否曾考虑让list()使用任何论据?如果是这样,是什么阻止了改变的实施?

2 个答案:

答案 0 :(得分:3)

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

例:

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

现在您使用mlist代替list

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

两者都会将[1]作为结果

答案 1 :(得分:0)

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

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

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