为什么在variables名称后添加尾随逗号使其成为一个元组?
我想知道为什么在variables名(在这种情况下是一个string)之后添加尾随逗号使其成为一个tuple
。 即
>>> abc = 'mystring', >>> print(abc) ('mystring',)
当我打印abc
它返回tuple
('mystring',)
。
逗号,而不是括号,这是重要的。 Python教程说:
一个元组由多个由逗号分隔的值组成
圆括号用于在使用逗号的其他地方消除歧义,例如,使您可以嵌套或input元组作为参数列表的一部分。
请参阅元组和序列的Python Tutorial部分
因为这是用一个元素编写元组文本的唯一方法。 对于列表文字来说,必要的括号使得语法是唯一的,但是因为parantheses也可以表示分组,所以在圆括号中包含一个expression式并不会把它变成一个元组:你需要一个不同的语法元素,在这里是逗号。
更新
看上面的更好的答案 。
原始答复
在Python中,元组由括号表示 。
元组不用括号表示。 任何expression式都可以用括号括起来,这对元组来说并不特别。 只是碰巧总是有必要使用括号,因为否则它会是模棱两可的,这就是为什么元组上的
__str__
和__repr__
方法会显示它们的原因。
我纠正了(我今天所做的一切,感叹)。
例如:
abc = ('my', 'string')
单元素元组呢? 括号表示法仍然成立。
abc = ('mystring',)
对于所有元组,括号可以省略,但逗号需要留在。
abc = 'mystring', # ('mystring',)
要么
abc = 'my', 'string', # ('my', 'string',)
所以实际上你正在做的是创build一个元素元组而不是一个string。
文件清楚地说:
包含至less一个逗号的expression式列表产生一个元组。 元组的长度是列表中的expression式的数量。 expression式从左到右进行评估。
解包多元素元组:
a, b = (12, 14) print type(a)
输出:
INT
解包单元素元组:
a, = (12, ) print type(a)
输出:
INT
除此以外:
a = (12,) print type(a)
输出:
元组
当您在单个值后面看到逗号时,该值将被解释为数据types“元组”。
以下是我从一些可能适用于你们的经验中学到的一些东西:
如果你是一个音乐家,单词元组可能会令人困惑,因为元组和三元组是用来描述在一定types的时间签名内使用的音符分组,它们并不严格兼容。 例如,当拍号是6/8(三重感觉)时,如同拍号是4/4(直觉)一样,两个八分音符的组合起作用。 或者反过来在四分之三的时间内玩三联。 这导致新手程序员或许将元组解释为一对值。
这不是你在编程中看到的那种元组。 这些元组是一个不可变的(一次赋值的)序列数据types,它可以容纳任意数量的值,但是可以被认为是一起被传送,就好像它们全部被包围在圆括号之间,或者换句话说,括号中的一个元组。
一旦赋值,就不能添加或删除元组,因此通常用于打包和解压缩variables。 我经常使用它从一个函数返回多个值:
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
在问题的例子中,您将variables“abc”分配给长度为1的元组。
您可以使用以下相似的语法执行多个分配:
x,y = 20,50
还要注意的是,print语句对用逗号结束打印语句有特殊的理解; 这告诉打印省略尾随的换行符。
print 'hello', print 'world'
结果:
hello world