首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的Truthy/falsy

Python中的Truthy/falsy
EN

Code Review用户
提问于 2013-12-18 21:33:22
回答 2查看 845关注 0票数 2
代码语言:javascript
复制
def truthy(v):
    if issubclass(v.__class__, numbers.Number):
        return bool(int(v))
    if isinstance(v, basestring):
        vl = v.lower()[0]
        if vl == 'y' or vl == 't':
            return True
    return False
  1. 我遗漏了哪些类型/类,Python可以将其计算为True/False,而我在这里忽略了这些类型/类吗?
  2. 缺点?更好的方法?
EN

回答 2

Code Review用户

回答已采纳

发布于 2013-12-21 10:27:29

我现在不能测试这个,但是在我看来,isinstance似乎是非常非质子的。假设您的原始逻辑是正确的,为什么不:

代码语言:javascript
复制
def truthy(v):
    try:
        return bool(int(v))
    except ValueError:
        pass
    try:
        first = v.lower()[0]
        return (first == 'y') or (first == 't')
    except AttributeError:
        pass
    return False

这样,您就不需要担心缺少任何类型--如果它可以转换为int,或者如果它实现了lower()方法,就会捕获它。

票数 2
EN

Code Review用户

发布于 2013-12-18 21:49:36

不如:

代码语言:javascript
复制
accepted_truthy_characters = {'y', 't'}

def truthy(value):
    if isinstance(value, basestring):
        return value and value[0].lower() in accepted_truthy_characters
    return bool(value)

在Python3.x中,基字符串不能工作,而是需要isinstance(value, str)

您忽略的一件事是,value可能是一个字符串,但它可能是空的,这将给您留下一个IndexError。

Python的bool()会为您检查一个int,所以我不认为您需要检查它是否是一个数字,用int()bool()进行转换,除非我遗漏了一些关于用例的内容。

出于好奇,你为什么需要这个?您正在检查用户输入吗?那不是永远都是一根线吗?在这种情况下,检查几个允许的“正”字符串不是更好吗?

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/37698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档