2

Pythonプログラミングは初めてです。Pythonでさまざまなチュートリアルを参照した著者はほとんどいません。PythonではNumbers(int、float、complex)、list、set、tuple、dictionary、stringはデータ型であり、テーマの一部はデータ構造を少数と言っていますはclasses.iは正しいと混乱しています。

私はPythonに関するエッセイを書いていて、ランダムなサイトでこの声明を見つけました.誰かがあなたの答えを明確にして正当化できるかどうか疑問に思っています.

4

3 に答える 3

3

正確な意味は、時間の経過とともにわずかに変化しています。最新バージョンの python (python 3) が最もシンプルで一貫性があるので、それについて説明します。


値とそれらの値の型の 2 種類があるという考えから始めましょう。

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

「データ型」とは、データの種類の説明です。その種類のインスタンスにできる値の種類と、それらに対して実行できる操作の種類です。

「クラス」は、データ型を表す 1 つの方法 (唯一の方法ではありません) であり、型の操作を型のインスタンス (「オブジェクト」と呼ばれる) の「メソッド」として扱います。これは、すべてのクラスベース言語の一般的な用語です。しかし、Python では「クラス」にも特定の意味があります。classステートメントによって定義されたもの、または特定の要件を満たす組み込み/拡張コードで定義されたものは、クラスです。

したがって、任意のサイズの整数とマッピング辞書はデータ型です。intPython では、これらは組み込みクラスおよびで表されますdict

「データ構造」とは、効率的または簡単にアクセスできるようにデータを編成する方法です。これは、データ型とは直接関係ありません。多くの言語 (C++ や Java など) では、新しいクラスを定義するには、インスタンスのメンバーがメモリ内でどのようにレイアウトされているかなどをコンパイラーに伝える必要がありますが、Python では、オブジェクトを構築し、それらにメンバーを追加し、インタープリターを追加するだけです。それらを整理する方法を考えます。(拡張モジュールを構築したり、ラッパー クラスを構築するために使用したりするときに発生する例外がありますがctypes、心配する必要はありません。)

高レベルの抽象データ構造 (ポインターベースのノードなど) と低レベルの抽象データ型 (先頭で一定時間の挿入と削除を実行できる要素の順序を保持するコレクションなど) に到達すると、状況がぼやけます。リンクされたリストは、本質的に特定のデータ構造を必要とするデータ型ですか、それとも明らかなデータ型を定義するデータ構造ですか? そうですね、大学でコンピューター サイエンスを専攻していない限り、その質問を理解している限り、その答えはそれほど大きな違いはありません。

したがって、マッピング辞書はデータ型ですが、抽象データ構造でもあります。また、その裏では、Python のdictオブジェクトは特定の具体的なデータ構造 (2 次プロービングを使用したオープン チェーン ハッシュ テーブル) から構築されていますが、これはまだ部分的に抽象的です (各バケットにはダック型の値が含まれています)。

于 2012-08-03T19:27:44.063 に答える
1

「データ型」と「クラス」という用語はPythonでは同義語であり、あなたが示した例ではどちらも正しいです。他のいくつかの言語とは異なり、単純な型はなく、Python ではすべて (変数でポイントできるもの) がオブジェクトです。一方、「データ構造」という用語は、セット、タプル、辞書、リストなどのコンテナ タイプに使用する必要があります。

于 2012-08-03T18:55:37.993 に答える