从字符串对象初始化的列表和元组

Jam*_*pam 4 python string tuples python-2.7 python-3.x

以下两者有何不同:

>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>> tuple((s))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((s,))
('string',)
>>>    
Run Code Online (Sandbox Code Playgroud)

字符串是一个可迭代的对象,这就是为什么它在元组内分成多个元素?

daw*_*awg 5

元组不是由括号决定的,而是由逗号决定的:

>>> (1)
1
>>> (1,)
(1,)
>>> (1),
(1,)
>>> 1
1
>>> 1,
(1,)
Run Code Online (Sandbox Code Playgroud)

删除中间括号,直到确定表达式:

>>> tuple((((('string')))))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((((('string'))),))
('string',)
>>> tuple((((('string'),)),))
(('string',),)
Run Code Online (Sandbox Code Playgroud)

你会看到 Python 是如何使用ast解析这些表达式的

>>> import ast
>>> ast.literal_eval("((((('string')))))")
'string'
>>> ast.literal_eval("((((('string')))),)")
('string',)
Run Code Online (Sandbox Code Playgroud)

tuple(('string'))并向您展示为什么与tuple('string'). 额外的括号不会创建元组,只会被解析器丢弃。