湖州网站建设公司排行榜/网站seo优化教程
我想知道为什么在变量名后添加一个尾随逗号(在本例中是一个字符串)使其成为tuple。即
>>> abc = 'mystring',
>>> print(abc)
('mystring',)
当我打印abc时,它返回tuple ('mystring',)。
另见:stackoverflow.com/questions/7992559/
这是在python中教授基本基本思想的一个很好的问题。
这是重要的逗号,而不是括号。 Python教程说:
A tuple consists of a number of values separated by commas
括号用于在使用逗号的其他地方消除歧义,例如,使您能够嵌套或输入元组作为参数列表的一部分。
请参阅有关元组和序列的Python教程部分
因为这是用一个元素编写元组文字的唯一方法。对于列表文字,必要的括号使语法唯一,但由于parantheses也可以表示分组,将括号中的表达式括起来不会将其转换为元组:您需要一个不同的语法元素,在本例中为逗号。
更新
请参阅上文以获得更好的答案。
原始答案
在python中,元组用括号 strike>表示。
Tuples are not indicated by the parentheses. Any expression can be enclosed in parentheses, this is nothing special to tuples. It just happens that it is almost always necessary to use parentheses because it would otherwise be ambiguous, which is why the __str__ and __repr__ methods on a tuple will show them.
我的立场得到了纠正(我今天一直都在做。叹气)。
例如:
abc = ('my', 'string')
单元素元组怎么样?括号表示法仍然有效。
abc = ('mystring',)
对于所有元组,可以省略括号,但需要保留逗号。
abc = 'mystring', # ('mystring',)
要么
abc = 'my', 'string', # ('my', 'string',)
所以实际上你正在做的是创建单个元素元组而不是字符串。
文件清楚地说:
An expression list containing at least one comma yields a tuple. The length of the tuple is the number of expressions in the list. The expressions are evaluated from left to right.
无论元组有多少元素,都可以省略括号
@SilentGhost:我抓住了自己并纠正了它。 在铸造石头之前给我一点时间,好吗?:)
括号不表示元组。 任何表达式都可以括在括号中,这对于元组来说并不是特别的。 事实上,几乎总是需要使用括号,因为否则它将是模糊的,这就是元组上的__str__和__repr__方法将显示它们的原因。
当您在单个值后面看到逗号时,该值将被解释为数据类型'tuple'。
这是我通过经验学到的一些东西,可能适用于你们中的一些人:
如果你是一名音乐家,单词元组可能会令人困惑,因为单词元组和三元组用于描述在特定类型的时间签名中使用的音符分组,它们并不严格兼容。例如,当时间签名是6/8(三重感觉)时,两个八分音符的分组如同时间特征是4/4(直感)一样。反之亦然,三重奏在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
解包多元素元组:
a, b = (12, 14)
print type(a)
输出:
int
解包单元素元组:
a, = (12, )
print type(a)
输出:
int
除此以外:
a = (12,)
print type(a)
输出:
tuple
在问题的示例中,您将变量'abc'分配给长度为1的元组。
您可以使用以下类似语法执行多项分配:
x,y = 20,50
另请注意,print语句对使用逗号结束print语句有特殊的理解;这告诉print省略尾随换行符。
print 'hello',
print 'world'
结果:
hello world