ホームページ >バックエンド開発 >Python チュートリアル >Python は変数変数名を実装します

Python は変数変数名を実装します

步履不停
步履不停オリジナル
2019-07-01 14:44:063566ブラウズ

Python は変数変数名を実装します

#この記事では主に Python で動的変数名を使用する方法を紹介しますので、必要な方は参考にしてください。プログラムを書いて、x1 を 1、x2 を 2 として、x100 が 100 になるまで何をしますか?

C のような静的言語では、変数名の識別子は実際にはコンパイラによってメモリ アドレスに直接変換されるため、各変数の値を手動で設定する以外にこれを行う方法はありません。そして、Python のような動的言語はそれを行うことができます。

当然考えやすいのは eval ですが、Python の変数名は単なる辞書のキーなので、実際にはそんな危険なことは必要ありません。この辞書を取得するには、locals 関数と globals 関数を直接使用します。

したがって、このプログラムは次のように実装できます:

コードは次のとおりです:

>>> names = locals()
>>> for i in xrange(1, 101):
...   names['x%s' % i] = i
...
>>> x1
1
>>> x2
2
>>> x100
100

しかし、この例は役に立たないと言うかもしれません。配列を使用して実装するのが現実的です。

次に、別の例を考えてみましょう。サーバーはオブジェクト データベースを使用し、オブジェクトをデータベースに直接保存できます。サーバーには現在サポートされているすべてのクラスがリストされており、ユーザーはリストに存在しないクラスを追加したいため、JSON または XML テキストがサーバーに送信されます。サーバーはこのテキストを解析し、クラス オブジェクトに変換し、クラス名を設定します。ユーザーはこのクラスのオブジェクトを自由に生成できます。

重要なのは、このデータベースがクラス名に関連しているということです。一般的な Object クラスを使用してすべてのオブジェクトを保存することはできません。そうしないと、クエリが台無しになります。

偶然にも、GAE フォーラムでもこの要件を提起した人がいましたが、Java しか知らなかった彼は、最終的には断念せざるを得ませんでした。

もちろん、いたずらとして使用することもできます:

コードは次のとおりです:

>>> locals()['True'] = False
>>> True
False

もう 1 つの用途は、変数名が既に存在するかどうかをテストすることです。標準的なアプローチは、NameError 例外を除いて try... することですが、実際には、locals() または globals() で直接使用して判断することができます。

ところで、もう一つ奇妙なメソッドを紹介します。このように書いている人がいるかどうかはわかりません:

コードは次のとおりです:

>>> import __main__
>>> hasattr(__main__, 'x')
False
>>> setattr(__main__, 'x', 1)
>>> x
1
>>> hasattr(__main__, 'x')
True

もちろん、いいえ、ある人はあなたにこのように書くことを勧めますが、私も会議に勧めません。

最後に、変数名を動的に設定するだけでなく、del locals()['x1'] などの動的削除も可能です。同様に、delattr も使用できます。

関連チュートリアルの推奨事項:

Python ビデオ チュートリアル

以上がPython は変数変数名を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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