我一直致力于一个学习项目"它涉及几个简短的单参数函数,其中参数可以是数字类型或数字列表。如,
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()
使用任何论据?如果是这样,是什么阻止了改变的实施?
答案 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])]))
当然,正如其他人提到的,如果函数只需要传递一个列表,那可能是最好的