0

私は物理学の学生で、主に Python と Matlab でプログラミングしていますが、現在はシミュレーションのパフォーマンスを向上させるために C に取り組んでいます。

簡単な質問: Python にポインターはありますか? Matlab にポインターはありますか? はいの場合、C と同じように「簡単に」使用できますか?

Python と Matlab の高レベル性の背後には、多くの指針が働いていることを私は知っています。問題は、次の C コードのようなことを Python または Matlab で明示的に実行できるかどうかです。

int *p;
int someValue = 1;
p = &someValue;
doSomethingForMe = callSomeFunction(p);

とにかくそれを行う意味がないことはわかっています(ほとんどのアプリケーションでは)。学びたいだけです。

4

2 に答える 2

7

Pythonには従来の意味での「変数」ではなく、名前があるとよく耳にします。また、このような概念は C などの低レベルで作業する場合にのみ意味があるため、「ポインター」もありません (このため、Python で C 互換ライブラリを使用すると、ctypes.ただし、そのようなポインターは、C との相互運用性のみを目的としています。)

C でポインタを使用する機能のほとんどは、Python では別の形式で提供されています。例えば:

  • 関数から複数の値を返す。C では、int foo(int *, int *)2 つの int (およびおそらくエラー コード) を返す必要があります。Python では、タプル unpacking: x, y = foo()with return x, yinを使用するだけfooです。
  • 大きなオブジェクトを渡します。とにかくすべてが参照渡しであるため、巨大なオブジェクトへの参照をコピーせずに安全に渡すことができます。
  • 入力パラメーターの変更。これのほとんどは、適切な変更可能な入力を選択することで可能になります。たとえば、リストを関数に渡し、関数内でリストを変更できます。Python では、参照が同じであるため、入力リストが変更されたように見えます。

    def change_list(l):
        l[0] = 3
    my_list = [1,2,3]
    change_list(my_list)
    print(my_list) # prints [3, 2, 3]
    

MATLAB には、Python とは異なる変数の概念があります。MATLAB では、変数はいくつかの次元をもつ行列です。書き込みはx = y効果的にコピーyします (寸法を適切にx設定します)。xMATLAB は、必要な場合を除き、実際にデータをコピーすることを避けるために内部的に最適化を行いますが、プログラマにとっては、xyが別々の行列であるかのように見えます。

MATLAB には、コンパイル済みの MEX 拡張 (C などの他の言語で記述されている) を扱っている場合を除き、ポインターもありません。Python と同様に、ポインターを必要とせずに物事を渡すためのメカニズムがあります (たとえば、複数の入力引数と出力引数)。

于 2013-03-08T09:01:46.433 に答える
0

ctypesPythonでは、どうやらライブラリでポインタを持つことができます。また、この質問のように、 Python でポインターの概念をシミュレートできます。

Matlab にはポインタもありません。

于 2013-03-08T08:55:42.737 に答える