strtobool是Python标准库中很棒的一个函数。
然而,它返回一个整数而不是布尔值,需要进行包装,例如bool(strtobool(x))
。
表面上看,这似乎不直观且具有误导性,尤其在像Python这样的弱类型语言中易被忽略。
是什么设计决策导致了这种方法?
我不知道为什么 strtobool()
返回一个 int。在大多数情况下,int 可以用作 bool,但是如果您实际上需要一个 bool,则建议您在脚本中创建一个新函数,类似于以下内容:
from distutils.util import strtobool as stb
def strtobool(string: str)->bool: return bool(stb(string))
strtobool()
返回一个布尔值。distutils
已被弃用并将在Python 3.12中被移除。关于strtobool
,建议自行重新实现它。以下是引用的传统文档地址https://docs.python.org/3.9/distutils/apiref.html。因此,在简短地说,不要使用它,并且在您的版本中,可以随意返回适当的bool
。
if strtobool(x)
的行为就像if bool(strtobool(x))
一样吗?你有一个实际上会有区别的例子吗? - FlyingTellerisinstance(x, bool)
的任何代码。但即使不使用类型提示,如果编写/使用不使用isinstance
的更好的代码,创建一个名为strtobool
并返回int
的方法似乎是一种意外的实现细节。答案可能只是“没有好的设计理由,编写它的人只是这样决定的”,但我怀疑这里有人知道某些重要细节影响了这个决定。 - Jethro