python str和tuple对象之间的区别

时间:2013-10-18 05:55:11

标签: python string object tuples

python如何初始化元组对象? 例如,当我创建一个像

这样的对象时
>>> object = ('Shark')

它将对象类型显示为str

>>> type(object)
<type 'str'>

然而,如果我创建一个像

这样的对象
>>> object = ('Shark',)

它将其类型显示为tuple

>>> type(object)
<type 'tuple'>

为什么这样? python如何创建/初始化元组,str对象?

3 个答案:

答案 0 :(得分:3)

来自docs

  

一个特殊问题是构造包含0或1的元组   items:语法有一些额外的怪癖来容纳这些。空   元组是由一对空括号构成的; 一个元组   通过使用逗号来构造一个项目(不是   足以将一个值括在括号中。)

因此,如果没有尾随,这两个陈述是等价的:

>>> x = 1
>>> x
1
>>> x = (1)
>>> x
1

但这些都是tuples

>>> x = 1,       #or (1,)
>>> x
(1,)
>>> x = 1, 2, 3  #or (1, 2, 3)
>>> x
(1, 2, 3)

答案 1 :(得分:1)

包含在parens中的表达式只是表达式(就像数学表达式中的parens,如(2+2)*4)。

但是,如果你添加一个尾随逗号,或者用逗号分隔的parens中有多个元素,它将成为一个元组。此外,如果您写(),您将获得一个空元组。

答案 2 :(得分:1)

在双引号或单引号中包含的任何内容都将被视为Python中的字符串。这两者之间没有区别 - 就像在PHP中一样,双引号字符串中的变量实际上将被评估,单引号将按原样显示。

括号括号和右括号内的任何内容都将被视为元组。但是,如果元组中只放置了一个对象,则它将被视为对象的类型。例如:

>>> a = (9)
>>> type(a)
<class 'int'>
>>> 
>>> a = ([9])
>>> type(a)
<class 'list'>
>>> 
>>> a = ('hello!')
>>> type(a)
<class 'str'>
>>> 
>>> a = {'a':1, 'b':1}
>>> type(a)
<class 'dict'>
>>> 

请注意,对象的长度无关紧要(放置在元组内部的对象,而不是元组本身)。

现在,如果你要在元组内部的对象之后放置一个逗号,Python会假设有另一个对象即将来临,它会把它视为一个元组而不是给它你错了另外,请注意Python用于存储大量内容的默认对象也是一个元组 - 这意味着即使您没有在括号中包含表达式,它也默认为您执行:

>>> a = 9, 8, 7
>>> a
(9, 8, 7)
>>> type(a)
<class 'tuple'>
>>> 
>>> a = 'Hello', 'Python', 'Typle'
>>> a
('Hello', 'Python', 'Typle')
>>> type(a)
<class 'tuple'>
>>>