2

所有我都是 python 编程的新手。我在 python 中提到了不同的教程,很少有作者说在 python 中,比如 Numbers(int,float,complex),list,set,tuple,dictionary,string 是数据类型,一些主题说数据结构很少是说类。我很困惑哪个是正确的。

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

4

3 回答 3

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!

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

于 2012-08-03T19:17:36.673 回答
2

“数据类型”是对一种数据的描述:什么样的值可以是那种类型的实例,以及可以对它们进行什么样的操作。

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

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

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

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

因此,映射字典是数据类型,但它们也是抽象的数据结构——而且,在幕后,Python 的dict对象是从一个特定的具体数据结构(具有二次探测的开链哈希表)构建的,该结构仍然是部分抽象的(每个bucket 包含一个鸭子类型的值)。

于 2012-08-03T19:27:44.063 回答
1

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

于 2012-08-03T18:55:37.993 回答