「内部」とは何ですか?プログラミングの意味は?


ベストアンサー

自動車のことを考えてみてください。私たちは、自動車がどのように機能するかを理解していなくても、自動車を運転することができます(そしてしばしばそうします)。ほとんどの人は、ボンネットの下にある車のエンジンを見ることはありません(アメリカではフードと呼んでいますが、たとえば、英国の人々はそれをボンネット)。

エンジンに加えて、トランスミッションがありますは、エンジンによって生成された電力を受け取り、それをドライブトレインに送信します。最終的にその力を取り、車輪を回します。ほとんどの人はこれらの詳細を理解しておらず、自動車を操作するために理解する必要もありません。

プログラマーとして、内部で何が起こっているのかを知ることは、洞察を与えるので役立つことがよくあります。

役立つと思われる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 "", line 1, in

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″>

であり、len()を呼び出すことができました。私のlen()はかなり役に立たない()ですが、len()は「コンテナ」だけでなく任意のオブジェクトに対して呼び出すことができるという点を証明しています。 」実際には、プログラマーとして、ビジネスやその他の組織を表す独自のオブジェクトOrganizationを作成する場合があります。また、Organizationオブジェクトでlen()を呼び出して、組織が存在していた年数を返すようにしたいと思うかもしれません。 。

内部で何が起こっているのかを理解することで、プログラマーとしてさらに前進することができます。

回答

他の人が何について良い説明をしたと思います。 「内部」とは、一般的な意味です。

明確にするための注意事項:コンピュータは、最も単純な形式では、プロセッサとメインメモリです。プロセッサは非常に特定の命令を読み取り、メモリ内の値を移動します。メモリは無数のセルに分割され、各セルにはアドレスがあります。

「内部」では、コンピュータのメモリは次のようになります。

(出典:https://chortle.ccsu.edu/AssemblyTutorial/Chapter-10/memory01.gif)

高級言語で作業している場合(JavaまたはPythonで作業していると思いますが、似たようなもの)なぜ物事がそのようになっているのか理解するのは難しいです。たとえば、リンクリストについて考えてみましょう。数字が入ったバブルの写真が表示され、その横にある別のバブルを指す矢印が表示されている場合があります。

そのようなもの:

これはすべて、リンクリストが配列などと比較してどのように機能するかを理解するのに役立ちます。ただし、「内部」では大きく異なります。

前述のように、コンピュータ内のすべては値を持つメモリセルです。リンクリストノードは、隣接するノードの近くで視覚化されますが、隣接するノードから数百バイトまたは数千バイト離れている場合があります。内部では、画像に表示されている矢印は実際にはポインタであり、ポインタはメモリ内の任意のセルを参照できます。特に、ポインタはリスト内の次のノードのアドレスを参照します。

この例が、彼が話していることを明確にするのに役立つことを願っています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です