【问题标题】:Distinction between python str and tuple objects [duplicate]python str和元组对象之间的区别[重复]
【发布时间】:2013-10-18 05:55:10
【问题描述】:

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

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

它显示对象的类型为str

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

同时,如果我创建一个类似的对象

>>> object = ('Shark',)

它将其类型显示为tuple

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

为什么会这样?? python 究竟是如何创建/初始化一个元组 str 对象的?

【问题讨论】:

  • 你基本上已经有了答案:组成元组的是逗号,而不是括号。
  • 您可以阅读更多关于它们的信息here

标签: python string object tuples


【解决方案1】:

来自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)

【讨论】:

    【解决方案2】:

    用括号括起来的表达式就是那个表达式(就像数学表达式中的括号,比如(2+2)*4)。

    但是,如果你添加一个尾随逗号,或者如果括号内有多个元素,用逗号分隔,它将成为一个元组。另外,如果你写(),你会得到一个空元组。

    【讨论】:

      【解决方案3】:

      包含在双引号或单引号内的任何内容在 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'>
      >>> 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        • 2015-12-16
        • 2017-04-27
        • 2019-04-27
        • 1970-01-01
        相关资源
        最近更新 更多