Python 为什么浏览循环中的元组会给我字符串的第一个字符?

Python 为什么浏览循环中的元组会给我字符串的第一个字符?,python,tuples,Python,Tuples,有人能给我解释一下这种行为吗: REQUIRED_USER_FIELDS = ["email"] for field in REQUIRED_USER_FIELDS: # field = 'email' -> OK for me, expected behaviour REQUIRED_USER_FIELDS = ("email") for field in REQUIRED_USER_FIELDS: # field = 'e' -> Why??? 谢谢。(“电子

有人能给我解释一下这种行为吗:

REQUIRED_USER_FIELDS = ["email"]
for field in REQUIRED_USER_FIELDS:
    # field = 'email' -> OK for me, expected behaviour

REQUIRED_USER_FIELDS = ("email")
for field in REQUIRED_USER_FIELDS:
    # field = 'e' -> Why???
谢谢。

(“电子邮件”)
不是元组。它只是括号中的一个字符串

您需要放置逗号使其成为元组:

REQUIRED_USER_FIELDS = ("email",)
#                        here--^
否则,for循环将遍历字符串
“email”
本身


您应该记住,创建元组的是逗号,而不是括号(如果有):

但是,您经常看到括号的原因是:

  • 它们更清楚地表明您正在创建一个元组

  • 在某些地方需要它们,例如调用函数时:

    >>> def func(arg):
    ...     return arg
    ...
    >>> # This fails because "a", "b" is treated as 2 separate arguments
    >>> func("a", "b")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: func() takes 1 positional argument but 2 were given
    >>>
    >>> # This works because ("a", "b") is treated as 1 argument (a tuple)
    >>> func(("a", "b"))
    ('a', 'b')
    >>>
    
    def func(参数): ... 返回参数 ... >>>#这失败了,因为“a”、“b”被视为两个独立的参数 >>>func(“a”、“b”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:func()接受1个位置参数,但给出了2个 >>> >>>#这是因为(“a”、“b”)被视为1个参数(元组) >>>func((“a”、“b”)) (‘a’、‘b’) >>>

  • 只包含一个元素的元组需要编写如下

    (something,)
    
    您可以通过执行以下操作来确保:

    >>> tuple(["email"])
    ('email',)
    

    括号通常是区分元组逗号和其他类型的逗号所必需的,例如函数参数commata。@poke-注意。我会提到的。
    >>> tuple(["email"])
    ('email',)