2006年06月03日

[Python]関数(デフォルトの引数値編)

今回は、デフォルトの引数値について学びます。

ドキュメント(tut.pdf)のP23を参考にします。

さっそく書いてみましょう。

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


'y'、'ye'、'yes'を入力すると、Trueを
'n','no','nop','nope'を入力すると、Falseを返すプログラムです。

このプログラムを実行してみます。

>>> ask_ok('Do you really want to quit?')
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    ask_ok('Do you really want to quit?')
  File "", line 7, in ask_ok
    if retries < 0: raise IOError, 'refusenik user'
IOError: refusenik user


正しい値を入力しなかったとき、デフォルトの引数で指定した値が表示され、再び入力を促します。

そして、デフォルトの引数で指定した値の回数繰り返し、最後に
エラーを出します。

このように、Pythonでは関数の引数にデフォルト値をもたせることができます。

ちなみに、このようにすると、デフォルトの値とは違う値を持たせることができます。

>>> ask_ok('Do you really want to quit?', 2)
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q
Yes or no, please!
Do you really want to quit?q

Traceback (most recent call last):
  File "", line 1, in -toplevel-
    ask_ok('Do you really want to quit?', 2)
  File "", line 7, in ask_ok
    if retries < 0: raise IOError, 'refusenik user'
IOError: refusenik user


回数が少なくなった!

Pythonなかなかスゴイ。


また、引数にリストを使う場合、リストに値が累積していきます
例として、次のようなプログラムを作ります。

>>> def f(a, L=[]):
         L.append(a)
         return L

これは、第1引数として得た値を、リストに格納するプログラムです。

さっそく実行してみましょう。
>>> print f(1)
[1]
>>> print f(2)
[1, 2]
>>> print f(3)
[1, 2, 3]

どんどん溜まっていきます。

コレを解消するには、次のようなプログラムを作るとできます。
>>> def f(f, L=None):
         if L is None:
                  L = []
         L.append(a)
         return L


これを実行すると、
>>> print f(1)
[1]
>>> print f(2)
[2]
>>> print f(3)
[3]

となります。


土曜日なんで、ちょっといつもより多めにやりました。

以上で本日のPythonのお勉強を終わりにします。

お疲れ様でした!

posted by yu at 15:35 | Comment(0) | TrackBack(0) | Python
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。