代码之家  ›  专栏  ›  技术社区  ›  fireshadow52

为什么我的python函数在使用Pool apply_async时将字符串参数视为列表/数组?[副本]

  •  0
  • fireshadow52  · 技术社区  · 4 年前

    在下面的示例中,我希望所有元素都是元组,为什么当元组只包含一个字符串时,它会被转换为字符串?

    >>> a = [('a'), ('b'), ('c', 'd')]
    >>> a
    ['a', 'b', ('c', 'd')]
    >>> 
    >>> for elem in a:
    ...     print type(elem)
    ... 
    <type 'str'>
    <type 'str'>
    <type 'tuple'>
    
    0 回复  |  直到 7 年前
        1
  •  209
  •   Jonathon Reinhart    4 年前

    当元组只包含一个字符串时,为什么它会被转换为字符串?

    a = [('a'), ('b'), ('c', 'd')]
    

    因为前两个元素不是元组;它们只是绳子。括号不会自动使它们成为元组。您必须在字符串后添加逗号,以向python指示它应该是一个元组。

    >>> type( ('a') )
    <type 'str'>
    
    >>> type( ('a',) )
    <type 'tuple'>
    

    要修复示例代码,请在此处添加逗号:

    >>> a = [('a',), ('b',), ('c', 'd')]
    
                 ^       ^
    

    Python Docs :

    一个特殊的问题是构造包含0或1个项的元组:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;带有一个项的元组是通过在值后面加逗号构造的(在括号中括一个值是不够的)。丑陋,但有效。

    如果你真的讨厌尾随逗号语法,一个解决方法是传递一个 list tuple() 功能:

    x = tuple(['a'])
    
        2
  •  25
  •   Frédéric Hamidi    12 年前

    你的前两个例子不是元组,它们是字符串。单项元组需要一个尾随逗号,如:

    >>> a = [('a',), ('b',), ('c', 'd')]
    >>> a
    [('a',), ('b',), ('c', 'd')]
    
        3
  •  13
  •   Rohit Jain    12 年前

    ('a') 不是元组,而只是字符串。

    您需要在末尾添加一个额外的逗号 python 把它们当作 tuple : -

    >>> a = [('a',), ('b',), ('c', 'd')]
    >>> a
    [('a',), ('b',), ('c', 'd')]
    >>> 
    
        4
  •  -2
  •   Aaj Kaal    4 年前

    当我看到这个页面时,我很惊讶为什么没有人提到一个非常常见的单元素元组方法。可能这是版本问题,因为这是一篇非常旧的帖子。不管怎样,它在这里:

    >>> b = tuple(('a'))
    >>> type(b)
    <class 'tuple'>