在Python中创建单个成员列表的简明方法?

ely*_*ely 4 python list

假设我有一些对象x可能是数据类型的单个实例(比方说float),或者它可能是一个float类型列表.

有没有什么我可以确保x包装为一个列表,如果有必要可能是一个单例列表,而不检查其类型或做这样的事情.

我想要list(x)总是工作的东西,无论x是单身还是单身,但这不起作用,因为单身不可迭代.

编辑:请参阅下面答案进行详细说明.

同时,我不想定义自己的函数来构造来自singeltons的列表,我也不想像这样内联任何内容:

from collections import Iterable
y = [x] if not isinstance(x, Iterable) else list(x)
Run Code Online (Sandbox Code Playgroud)

如果没有比这更简洁的话,那没关系.我正在寻找一些已经内置于语言中的干净方法.

我相信有些人可能认为这种isinstance方法很干净而且很好,但我特别想找到一些更简洁的东西,不要求我先写任何新内容.我在搜索文档页面时找不到任何内容,而且我不确定如何向搜索引擎提出这个问题.

msw*_*msw 5

这是你没有问过的问题的答案,但也许应该有.我只能猜测,因为你没有给出相关的背景.

我如何处理违反我的接口合同的传递给我的论点?

你不应该试着.如果我打电话给sum(2)我正确的

TypeError:'int'对象不可迭代

因为sum期待迭代,我没有给它一个.如果你担心有人会同时打电话

my_function(2.2)
my_function([2.2, 4.4])
Run Code Online (Sandbox Code Playgroud)

正确的反应是引发TypeError,而不是尝试为调用者修补问题,因为只要你修复第一个案例,就会有人调用

my_function([2.2, 'loretta'])
Run Code Online (Sandbox Code Playgroud)

你也覆盖那个案子吗?如果他们向您提供自我参考列表怎么办?如果你来自强类型的语言背景,那么滥用Python就会有很强的诱惑力,因此它就像Java一样.这只会产生糟糕的Python代码:你在缺陷之上堆积了一个黑客.

而且"类型安全"也有点像芥末,否则double sqrt(float)不会返回域错误,但确实如此.应该sqrt采取其论证的绝对值?呼叫签名中的掩码错误仅确保缺陷未被发现,然后在您获得无法预期的无效参数时稍后中断.

  • 我认为对于那些来自设计和面向对象视角的人来说,这是一个可靠的答案.但是如果你有一些处理大型,笨拙的生产级科学计算的经验,你就会开始看到这些规则需要被打破的地方.我接受和使用的大多数东西都不是由程序员构建的.据说,只有熟悉Matlab的工程师才能将它们整合在一起.将精心设计的东西作为他们工作的后端就足够了.无论您如何努力,您都无法使系统符合设计原则. (3认同)

Ant*_*ony 0

我不知道有什么内置的东西。您的解决方案对我来说看起来是最好的选择,尽管您可能想使用序列 ABC 而不是 Iterable。

  • @EMS:我认为抛出 `TypeError` 更好。隐藏错误是邪恶的。总是努力理解表达式的态度会导致 PHP 和 JavaScript 等暴行。 (2认同)
  • @EMS:只要引发“TypeError”,根据定义就是如此。这正是重点。在 PHP 中,将数字添加到字符串中并不是错误。我非常喜欢 Python 的方法。 (2认同)