代码之家  ›  专栏  ›  技术社区  ›  David Parks

“tuple(None)”和“None,)”有什么区别?

  •  0
  • David Parks  · 技术社区  · 6 年前

    我需要返回一个由1个对象组成的元组(我的函数是一类函数中的一个,所有函数都应该返回一个由1+个对象组成的元组)。我要返回的对象可能是 None

    return (possibly_none_object,)
    

    但我总是觉得用逗号来表示语法很尴尬,所以我想我应该这样做:

    return tuple(possible_none_object)
    

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

    但第二行 {TypeError} 'NoneType' object is not iterable

    这可能是一个微不足道的问题和答案,但我很好奇。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Sean Peters    6 年前

    tuple(x) 要求x的类型为iterable

    比如说 tuple('a', 'b') 不起作用但 tuple(['a', 'b'])

    所以呢 tuple([None]) (None,)

        2
  •  2
  •   Sraw    6 年前

    如果你不能接受逗号,即使它是标准的,你只会使它更复杂。

    tuple 接受iterable对象并将其转换为元组。所以你可以通过 tuple([possible_none_object]) . 但不是更尴尬吗?Rudendant括号和额外创建的列表。

    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