How the following two are differ:
>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>> tuple((s))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((s,))
('string',)
>>>
字符串是可迭代对象,因此在元组内部分成多个元素?
How the following two are differ:
>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>> tuple((s))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((s,))
('string',)
>>>
字符串是可迭代对象,因此在元组内部分成多个元素?
>>> (1)
1
>>> (1,)
(1,)
>>> (1),
(1,)
>>> 1
1
>>> 1,
(1,)
>>> tuple((((('string')))))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((((('string'))),))
('string',)
>>> tuple((((('string'),)),))
(('string',),)
>>> import ast
>>> ast.literal_eval("((((('string')))))")
'string'
>>> ast.literal_eval("((((('string')))),)")
('string',)
tuple(('string'))
与tuple('string')
是相同的。多余的括号不会创建一个元组,而只会被解析器丢弃。tuple
,它将执行与在字符串上调用 list
相同的操作:遍历该可迭代对象的“最浅层”(第一维)部分。以下是示例:>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>>
>>> tuple((x for x in [s]))
('string',)
s
中的第一维是字符串 'string',所以元组会从 s
中获取每个值。在第二个例子中,第一维是包含变量 s
的列表 s。在这种情况下,变量本身就是第一维,因此整个字符串都被打包成元组。最后的生成器案例证明了这一点。list
期望 其参数为 一个序列、支持迭代的容器或迭代器对象。[]
或 (,)
包含它时,您正在创建字符串列表或字符串元组。因此,取出其中的每个元素并准备一个新列表。
(s)
和s
是完全相同的。逗号是使你最后一个例子中的内部参数(s,)
成为元组的原因,而不是封闭括号。或者你可以换句话说,括号是必要但不充分的。 :) - roippi