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])]))
当然,正如其他人所提到的,如果该函数只需要传递一个列表,那可能是最好的
我一直在研究 "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])]))
当然,正如其他人所提到的,如果该函数只需要传递一个列表,那可能是最好的