ベストアンサー
自動車のことを考えてみてください。私たちは、自動車がどのように機能するかを理解していなくても、自動車を運転することができます(そしてしばしばそうします)。ほとんどの人は、ボンネットの下にある車のエンジンを見ることはありません(アメリカではフードと呼んでいますが、たとえば、英国の人々はそれをボンネット)。
エンジンに加えて、トランスミッションがありますは、エンジンによって生成された電力を受け取り、それをドライブトレインに送信します。最終的にその力を取り、車輪を回します。ほとんどの人はこれらの詳細を理解しておらず、自動車を操作するために理解する必要もありません。
プログラマーとして、内部で何が起こっているのかを知ることは、洞察を与えるので役立つことがよくあります。
役立つと思われる2つのPythonの例:
Pythonの変数はよく説明されています初心者のプログラマーにとっては、データを配置できる名前付きボックスです。したがって、書くとき
x = 1
実際には、ボックスを作成し、x
、ボックスに1を入力します。後でボックスを調べると、1が入っていることがわかります。
ただし、実際には、内部で起こっていることではありません
スパン>。変数xは、参照またはラベルであり、1が実際にメモリのどこに格納されているかを示します。 1を含むボックスに貼り付けられている「x」が付いた付箋を考えてみてください。ボックスに何か他のもの、おそらく2を入れることにした場合、Pythonは新しいボックスを作成し、付箋を移動します最初のボックスから2番目のボックスに注意してください。これは、Pythonのid()
関数を使用して簡単に説明できます。この関数は、オブジェクトがPythonのメモリ内のどこにあるかを効果的に教えてくれます(厳密には真実ではありませんが、余談が必要であり、もはや役に立たない質問に答えるために)。
>>> x = 1
>>> id(x)
4501308752
>>> x = 2
>>> id(x)
4501308784
x
が特定の場所にいつあったかがわかります内容を変更しましたが、x
が実際に移動しました。これが起こる理由は、ここでも重要ではない別の余談です。実際、xは、xが参照するデータが別の場所にあるという意味で移動しました。
Pythonプログラマーはこれを知らず、さらに重要なことに、彼らはこれを知る必要はありません。名前付きボックスの例えを使用することはまったく問題ありません。
2番目の例はより複雑で、初心者には理解しにくい可能性があります。
Pythonデータモデルは、多くのいわゆる組み込み関数を内部のクラスメソッドにマッピングします。テレビ番組「ストレンジャー・シングス」を参考に説明したいと思います。そのショーでは、上向き 下向きがあります。これは代替宇宙のようなものです。物事は認識できますが、めちゃくちゃです。 Pythonのlen()
関数について考えてみます。これは、マニュアルに組み込み関数としてリストされています。この関数は何かの要素の数を返します。 string
(コンテナ)、(これもコンテナ)など。
Pythonプログラマーの初心者は、通常、len()
は単なる組み込み関数であり、任意のコンテナ。実際、内部で発生するのは、Pythonがlen()
への呼び出しを
逆さまは\_\_len\_\_()
と呼ばれます。 len()
に渡すオブジェクトに\_\_len\_\_()
メソッドがある場合、それは機能します。そうでなければ、そうではありません。これが、たとえば、整数でlen()
を呼び出すことができない理由です。
>>> len(5)
Traceback (most recent call last):
File "
TypeError: object of type "int" has no len()
最初のPythonプログラマーは、これが整数がコンテナーではないことを意味すると理解しているため、これは重要ではありません。ただし、len()
関数を呼び出すことができる整数型を作成するのは簡単です。
>>> class MyInt(int):
... # create an "upside down" method for len()
... def \_\_len\_\_(self):
... return 1
...
>>> x = MyInt(13)
>>> x
13
>>> len(x)
1
MyInt
という新しい型を作成し、変数ividを定義しましたタイプMyInt
の= “f8c0decf46″>