我经常遇到这个问题,如果没有一些非常简单和通俗的一行解决方案,我会感到惊讶.
假设我有一个方法或函数,它接受一个列表或其他一些iterable对象作为参数.我希望对对象中的每个项目执行一次操作.
有时,只有一个项目(例如,浮点值)被传递给该函数.在这种情况下,我的for循环不知道该怎么办.因此,我发现自己在代码中添加了以下代码片段:
from collections.abc import Sequence
def my_function(value):
if not isinstance(value, Sequence):
value = [value]
# rest of my function
这是可行的,但似乎很浪费,也不太清晰.在搜索StackOverflow时,我还发现字符串被视为序列,因此如果参数错误,这段代码很容易中断.这感觉不是正确的方法.
我来自MATLAB背景,这在该语言中得到了巧妙的解决,因为标量被视为1x1矩阵.我希望,至少会有一个内置的,比如numpy's atleast_1d function,如果不是iterable,它会自动将任何东西转换成iterable.