関数のデフォルト値を使用して Python で関数の静的変数を実装する方法

WBOY
リリース: 2016-06-16 08:42:47
オリジナル
1223 人が閲覧しました

この記事の例は、Python が関数のデフォルト値を使用して関数の静的変数を実装する方法を示しています。具体的な方法は次のとおりです。

1. Python 関数のデフォルト値

Python 関数のデフォルト値を使用すると、関数を呼び出すときにコードを記述するときに便利になります。多くの場合、デフォルト値を使用するだけで済みます。 そのため、Pythonでは特にクラスの初期化関数で関数のデフォルト値がよく使われます。 クラスを使用する場合、大量のパラメーターを渡さずにクラスを簡単に作成できます。

関数パラメータ名の後に「=defalut_value」を追加する限り、関数のデフォルト値が定義されます。注意すべき点の 1 つは、デフォルト値を持つパラメータは関数パラメータ リストの最後になければならないということです。デフォルト値を持たないパラメータは、デフォルト値を持つパラメータの後に配置することはできません。そのように定義すると、インタプリタはパラメータの受け渡し方法を知りません。

まずサンプルコードを見てみましょう:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
  while True:
    ok = raw_input(prompt)
    if ok in ('y', 'ye', 'yes'): return True
    if ok in ('n', 'no', 'nop', 'nope'): return False
    retries = retries - 1
    if retries < 0: raise IOError, 'refusenik user'
    print complaint
ログイン後にコピー

上記の関数を呼び出すと、再試行回数と出力プロンプト言語を変更できます。面倒な場合は何も変更する必要はありません。

2. Python は関数のデフォルト値を使用して関数の静的変数を実装します

静的変数は Python ではサポートされていませんが、関数のデフォルト値を使用して静的変数の関数を実装できます。
関数のデフォルト値が内容が変更可能なクラスである場合、クラスの内容は変更可能ですが、クラスの名前は変更されません。 (開いたメモリ領域は変化しないのと同じですが、内容は変化する可能性があります)。
これは、Python の関数のデフォルト値は 1 回しか実行されないためです (静的変数と同様、静的変数の初期化も 1 回実行されます)。これが共通点です。

次のプログラムの一部を見てください:

def f(a, L=[]):
  L.append(a)
  return L
 
print f(1)
print f(2)
print f(3)
print f(4,['x'])
print f(5)

ログイン後にコピー

出力結果は次のとおりです:

[1]
[1, 2]
[1, 2, 3]
['x', 4]
[1, 2, 3, 5]
ログイン後にコピー

上記はわかりやすいですが、なぜ最後の「print f(5)」の出力が「[1, 2, 3, 5]」になるのでしょうか?

これは、「print f(4,['x'])」のときにデフォルト変数が変更されていないためです。デフォルト変数の初期化は 1 回だけ (デフォルト値での最初の呼び出し) しか実行されないためです。初期化が実行されます。オープンされたメモリ領域(デフォルト変数と呼ぶことができます)は変更されていないため、最終的な出力結果は「[1, 2, 3, 5]」になります。

この記事で説明されている例は、Python プログラミングを行うすべての人にとって役立つと思います。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート