Python.use(better) #range: step01 -- while n:

記事一覧 Python.use(better)《Python3.1》

while n:

《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

組み込み関数と同等の機能を実現する過程を通して「関数」の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。

事例:コードの解説

step00 》のコードを工夫すると、冗長な変数 c を減らせます。

    def myrange(n):
        s = []
        while n:
            n -= 1
            s.append(n)
        return s[::-1]
■ #1: 関数のリターン値
        s = []
        while n:
            ...
            s.append(n)
        return s[::-1]

変数 s は、関数のリターン値(数列を列挙したリスト)を保持します。

  • リスト s の末尾に、数列の要素 n を追加 append します。
  • リスト s の各要素を逆順に列挙した、新たなリスト s[::-1] をリターン値にします。
■ #2: while 文
        while n:
            n -= 1
            ...

while に続く条件式 n を満たす(n の値が 0 でない)かぎり、while ブロック内に記述したコードの断片を実行します。

  • while ブロックを実行するたびに、変数 n の値をひとつずつ減らします。

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i my_range.py
>>> do()
 0: step00 -- def myrange(n):
 1: step01 -- while n:
 2: step02 -- s[0:0] = str(n)
 3: step03 -- def myrange(c, n):
 4: step04x -- def myrange(*args):
 5: step05 -- @myrange_args
 6: step06 -- def myrange(c, n, m):
 7: step07x -- def myrange_args(f):
 8: step08 -- def myrange_keys(f):
 9: step09 -- def g(*args, **keys):
10: step10 -- yield start
11: step_spyOn -- @spyOn
>>>
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do に実引数を指定します。

>>> do(1)
>>> # -------------------------------------------------- step01
>>> for e in range(3):
    s = range(e)
    print(s, list(s))
range(0, 0) 
range(0, 1) [0]
range(0, 2) [0, 1]
>>> for e in range(3):
    s = myrange(e)
    print("myrange(%d)"%e, s)
myrange(0) 
myrange(1) [0]
myrange(2) [0, 1]
>>>

新たに作成した関数 myrange が、組み込み関数 range に準拠していることを確認します。

  • 引数で指定した個数の(0 から始まる)数列を列挙した、リストが得られます。

《余録》テストケース

def ex_range1(local, n):
    X = '''for e in range({0}):
    s = range(e)
    print(s, list(s))'''.format(n)
    print_(X, local, "exec")

    X = '''for e in range({0}):
    s = myrange(e)
    print("myrange(%d)"%e, s)'''.format(n)
    print_(X, local, "exec")

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/11/29