ホームページ  >  記事  >  バックエンド開発  >  Pythonにはポインタがあるのでしょうか?

Pythonにはポインタがあるのでしょうか?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-06-18 17:10:1126461ブラウズ

Python はポインターの適切なカプセル化を備えており、すべてが「オブジェクト」であり、すべてのオブジェクトがそれを指す「変数」を持っています。この「変数」が「ポインタ」です。 Java のように、ランダムに移動したり、計算を実行したりすることはできません。関数を含めることも「オブジェクト」であり、変数を指すことは関数のエントリアドレスを指します。

Pythonにはポインタがあるのでしょうか?

#C では、関数の入り口アドレスを指すポインタを関数ポインタと呼びます。したがって、この用語も Python から借用しています。

たとえば、並べ替えコード セグメントを作成し、STL で並べ替えを使用します。

int arr[10]={5,8,4,7,6,5,7,4,2,9};
std::sort(arr,arr+10);

デフォルトは昇順です。特別な並べ替え基準が必要な場合は、3 番目のパラメータを指定する必要があります。 3 番目のパラメータは関数ポインタです。ソートの原理は、元のシーケンスで b が a より前にあると仮定すると、関数ポインター pf(a,b) によって呼び出される関数の戻り値が true のときに交換が行われるということです。 false が返された場合は、ソート アルゴリズムに関連しています。たとえば、ソートは不安定なソートであるため、2 つの数値が等しい場合でも位置を交換する可能性があります。

関連する推奨事項: "Python ビデオ チュートリアル "

降順並べ替えを作成します。次に、最初に比較関数 cmp を記述する必要があります:

bool cmp(int a,int b)
{
    return a>b;//当后面的数大于前面时交换
}

次に、関数名がそのエントリ アドレスであるため、それを渡します:

std::sort(a,a+10,cmp);

これは、Python でも同様です。リスト 並べ替え関数 Sort(list, cmp)

したがって、cmp も「オブジェクト」であり、関数のエントリ アドレスを渡すことができます。呼び出しステートメントは次のとおりです。

def cmp(a,b):return a>b
li=[5,8,4,7,6,5,7,4,2,9]
Sort(li,cmp)

これは、関数ポインターの機能に似ています。

以上がPythonにはポインタがあるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。