繁体   English   中英

'tuple(None)`和`(None,)`有什么区别?

[英]What is the difference between `tuple(None)` and `(None,)`?

我需要返回一个1对象的元组(我的函数属于一类都应该返回1+对象的元组的函数)。 我要返回的对象可能是None ,但是为了一致性,仍需要将其包装在元组中。 一种方法是:

return (possibly_none_object,)

但我总是发现语法和缠绵的逗号很尴尬,所以我想我会这样:

return tuple(possible_none_object)

我认为这会做完全相同的事情,并且更加明确。

但是第二行抛出{TypeError} 'NoneType' object is not iterable 这使我想知道这两个语句为什么不同,以及在我对python和元组的理解中可能缺少哪些难以捉摸的细节。

这可能是一个琐碎的问答,但我很好奇。

tuple(x)要求x为可迭代类型

因此,例如tuple('a', 'b')不起作用,但是tuple(['a', 'b'])

所以tuple([None])等效于(None,)

如果即使标准格式也不能接受挥之不去的逗号,则只会使它更加复杂。

tuple接受一个可迭代的对象,并将其转换为元组。 因此,您可以通过tuple([possible_none_object])完成所需的工作。 但是不是更尴尬吗? 后方括号和另外创建的列表。

或者,您也可以使用装饰器使它变得更复杂,该装饰器为您隐藏了挥之不去的逗号:

def ensure_tuple(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        if not isinstance(result, tuple):
            return (result,)
        return result
    return wrapper

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM