Python 为什么在变量名后添加一个尾随逗号使其成为元组?

Python 为什么在变量名后添加一个尾随逗号使其成为元组?,python,syntax,tuples,Python,Syntax,Tuples,我想知道为什么在变量名(在本例中为字符串)后添加一个尾随逗号会使其成为元组。i、 e >>> abc = 'mystring', >>> print(abc) ('mystring',) 当我打印abc时,它返回元组('mystring',) 更新 请参见上面的内容 原始答案 在python中,元组由括号表示 元组不由括号表示。任何表达式都可以用括号括起来,这对元组来说并没有什么特别的。碰巧的是,几乎总是需要使用括号,因为如果不使用括号,它会变得模棱两可,这

我想知道为什么在变量名(在本例中为字符串)后添加一个尾随逗号会使其成为
元组。i、 e

>>> abc = 'mystring',
>>> print(abc)
('mystring',)

当我打印
abc
时,它返回
元组
('mystring',)

更新

请参见上面的内容

原始答案

在python中,元组由括号表示


元组不由括号表示。任何表达式都可以用括号括起来,这对元组来说并没有什么特别的。碰巧的是,几乎总是需要使用括号,因为如果不使用括号,它会变得模棱两可,这就是为什么元组上的
\uuuu str\uuuuuu
\uuuu repr\uuuu
方法会显示它们的原因

我被纠正了(我今天所做的一切,唉)

例如:

abc = ('my', 'string')
那么单元素元组呢?括号符号仍然有效

abc = ('mystring',)
对于所有元组,括号可以省略,但逗号需要保留

abc = 'mystring', # ('mystring',)

所以实际上,您所做的是创建一个元素元组,而不是字符串

报告明确指出:

包含至少一个逗号的表达式列表将生成一个元组。元组的长度是列表中表达式的数量。表达式从左到右求值


重要的是逗号,而不是括号。Python教程说:

元组由许多用逗号分隔的值组成

括号用于在使用逗号的其他位置消除歧义,例如,使您能够嵌套或输入元组作为参数列表的一部分


请参阅

,因为这是使用一个元素编写元组文字的唯一方法。对于列表文字,必要的括号使语法唯一,但由于parantesse也可以表示分组,因此将表达式括在括号中不会将其转换为元组:您需要一个不同的语法元素,在本例中为逗号。

在问题的示例中,您将变量“abc”分配给了长度为1的元组

您可以使用类似的语法执行多个赋值:

x,y = 20,50
还要注意,print语句对以逗号结尾的print语句有特殊的理解;这告诉print忽略尾随的换行符

print 'hello',
print 'world'
结果:

hello world
解包多元素元组: 输出:

int

解包单元素元组: 输出:

int

否则: 输出:

元组


当您在单个值后看到逗号时,该值将被解释为数据类型“tuple”

以下是我从经验中学到的一些东西,可能适用于你们中的一些人:

如果你是一个音乐家,tuple这个词可能会让人困惑,因为tuple和triple这个词是用来描述在特定时间签名类型内使用的音符分组的,而这些音符并不严格兼容。例如,由两个八分音符组成的一组,当时间特征为6/8(三连音)时,演奏时,就好像时间特征为4/4(直音)。反之亦然,在四分之四的时间里演奏三重奏。这可能导致新手程序员将元组解释为一对值

这与您在编程中看到的元组不同。这些元组是一种不可变(一旦分配就不可更改)的序列数据类型,它可以保存任意数量的值,但可以被视为一起传输,就像它们都被括在括号之间,或者换句话说,是一个括号元组

一旦元组被赋值,就不能从元组中添加或删除内容,所以它通常用于打包和解包变量。我经常使用它从函数返回多个值:

def somefunction_foo(some_data_file):
    map1 = dict()
    map2 = dict()
    map3 = dict()

    with open(datafile, 'r') as file: # auto-close the file after this block
        for row in file:
            pass
            # don't actually pass, but 
            # fill each map with specific data from the same file

    return map1, map2, map3  # I'm returning a tuple, but without parenthesis

我对逗号的应用有些困惑,因为您也使用逗号来制作列表,而不是元组,但是使用不同的变量赋值

在此,我举了一个简单的例子,介绍如何创建元组或列表

abc = 1,2,3 # prints a tuple: (1, 2, 3)
*abc, = 1,2,3 # prints a list: [1, 2, 3]

无论元组中有多少个元素,都可以省略括号has@SilentGhost当前位置我抓住机会纠正了它。在扔石头之前给我一点时间,好吗?:)元组不由括号表示。任何表达式都可以用括号括起来,这对元组来说并没有什么特别的。碰巧,几乎总是需要使用括号,因为否则它会模棱两可,这就是为什么元组上的
\uuu str\uuuu
\uuu repr\uuu
方法会显示它们的原因。另请参见:这是一个在python中教授基本概念的好问题。我对元组的理解发生了变化。
a, = (12, )

print type(a)
a = (12,)

print type(a)
def somefunction_foo(some_data_file):
    map1 = dict()
    map2 = dict()
    map3 = dict()

    with open(datafile, 'r') as file: # auto-close the file after this block
        for row in file:
            pass
            # don't actually pass, but 
            # fill each map with specific data from the same file

    return map1, map2, map3  # I'm returning a tuple, but without parenthesis
abc = 1,2,3 # prints a tuple: (1, 2, 3)
*abc, = 1,2,3 # prints a list: [1, 2, 3]