Returning tuple with a single item from a function

前端 未结 4 2018
挽巷
挽巷 2020-12-01 21:14

Just came across this little bit of weirdness in Python and thought I\'d document it write it as a question here in case anyone else is trying to find

相关标签:
4条回答
  • 2020-12-01 21:24

    This is not a bug, a one-tuple is constructed by val, or (val,). It is the comma and not the parentheses that define the tuple in python syntax.

    Your function is actually returning a itself, which is of course not iterable.

    To quote sequence and tuple docs:

    A special problem is the construction of tuples containing 0 or 1 items: the syntax has some extra quirks to accommodate these. Empty tuples are constructed by an empty pair of parentheses; a tuple with one item is constructed by following a value with a comma (it is not sufficient to enclose a single value in parentheses). Ugly, but effective.

    0 讨论(0)
  • 2020-12-01 21:41

    You need to explicitly make it a tuple (see the official tutorial):

    def returns_tuple_of_one(a):
        return (a, )
    
    0 讨论(0)
  • 2020-12-01 21:48

    Instead of that ugly comma, you can use the tuple() built-in method.

    def returns_tuple_of_one(a):
        return tuple(a)
    
    0 讨论(0)
  • 2020-12-01 21:49

    (a) is not a single element tuple, it's just a parenthesized expression. Use (a,).

    0 讨论(0)
提交回复
热议问题