python数据类型是类还是数据结构?

时间:2012-08-03 18:45:40

标签: python

所有我都是python编程的新手。我在python中引用了不同的教程,很少有作者说在python中像Numbers(int,float,complex),list,set,tuple,dictionary,string是数据类型,一些主题说数据-structure很少说class.i我很困惑这是正确的。

我正在写一篇关于Python的文章并在一个随机网站上发现这个声明,只是想知道是否有人可以澄清并证明你的答案。

3 个答案:

答案 0 :(得分:3)

确切含义随着时间的推移略有变化。最新版本的python(python 3)是最简单和最一致的,所以我将用它来解释。


让我们从有两种观点开始:价值观和价值观的类型。

python中的值可以是,例如,数字,列表,甚至是函数。

值的类型描述了这些。所以数字的类型可能是int,例如。

到目前为止,我们只考虑了“内置”语言的内容。但你也可以定义自己的东西。为此,您定义了一个新类。 type()函数会说(在python 3中)你的类实例的类型是类本身:

所以也许您定义了一个名为MyFoo的类:

>>> class MyFoo:
>>>     def __init__(self, a):
>>>         self.a = a
>>>
>>> foo = MyFoo(1)
>>> type(foo)
<class '__main__.MyFoo'>

将其与整数进行比较:

>>> type(1)
<class 'int'>

很明显,你的价值类型就是它的类别。

因此python中的值(例如数字,列表甚至函数)都是类的实例。值的类型是描述其行为方式的类。

现在事情变得更复杂,因为你也可以为一个值分配一个类型!那么你有一个类型的值:

>>> x = type(1)
>>> type(x)
<class 'type'>

事实证明,任何类型的类型都是type。这意味着任何类本身都是一个实例(type)。这有点奇怪。但它是一致的,而不是你需要担心的事情。


总而言之,对于python 3(这是最简单的):

  • 每个值都有一个类型
  • 类型描述了值的工作原理
  • 类型是类
  • 类的实例类型是其类
  • 数字,列表,函数,用户定义的对象都是类的实例
  • 偶数类是类的实例!它们是type
  • 的实例

最后,尝试回答您的确切问题。有些人调用类数据类型和实例数据结构(我认为)。这是混乱和混乱,人们不是很小心。最简单的方法就是坚持使用类和类型(实际上是同样的东西)和实例。

答案 1 :(得分:2)

“数据类型”是对某种数据的描述:哪种类型的值可以是这种类型的实例,以及可以对它们执行何种操作。

“类”是表示数据类型的一种方式(尽管不是唯一的方法),将类型上的操作视为类型实例上的“方法”(称为“对象”)。这是所有基于类的语言的通用术语。但是Python对“类”也有一个特定的含义:由class语句定义的东西,或者在满足特定要求的内置/扩展代码中定义的东西,都是一个类。

因此,任意大小的整数和映射字典都是数据类型。在Python中,它们由内置类intdict表示。

“数据结构”是一种组织数据以便高效或轻松访问的方法。这与数据类型无直接关系。在许多语言(如C ++或Java)中,定义一个新类需要您告诉编译器实例的成员如何在内存中布局,以及类似的事情,但在Python中您只需构造对象并向其添加成员和解释器弄清楚如何组织它们。 (当您构建扩展模块或使用ctypes构建包装类时会出现异常,但不要担心。)

当您进入更高级别的抽象数据结构(如基于指针的节点)和更低级别的抽象数据类型(如保留顺序的元素集合,可以在头部进行常量时间插入和删除)时,事情变得模糊)。链表是一种本质上需要某种数据结构的数据类型,还是一种定义明显数据类型的数据结构,或者是什么?好吧,除非你在大学攻读计算机科学专业,否则只要你理解了这个问题,答案就不会有太大的影响。

因此,映射字典是数据类型,但它们也是抽象数据结构 - 并且,在封面下,Python的dict对象是从特定的具体数据结构构建的(具有二次探测的开放链式哈希表) )它仍然是部分抽象的(每个桶包含一个鸭型值)。

答案 2 :(得分:1)

条款&#34;数据类型&#34;和&#34;班&#34;在Python中是同义词,它们对于您给出的示例都是正确的。与其他一些语言不同,没有简单的类型,Python中的所有内容(可以指向变量)都是一个对象。术语&#34;数据结构&#34;另一方面,应该保留容器类型,例如集合,元组,字典或列表。