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]