2012年6月5日火曜日

Pythonにおける仮引数の取り方

Pythonにおける仮引数のテクニックは主に以下の3種類がある。サンプルコードを通じて、これらの機能について確認していくことにする。

名称 役割
デフォルト引数関数の引数で基本的に与える値が決まっている場合はデフォルト引数を利用するとよい。呼び出しの時に与える引数を減らすことができるので、記述量を減らすことができる。
可変長引数外からいくつ引数を与えても処理してくれる仕組み。
名前付き引数順番を変えても、呼び出す側で明示的に「引数名=値」の形式で指定しておけば引数の順番を関数定義で設定した順序から変えても構わないという仕組み。これにより、大量の引数があるときでも、順序を気にせず指定してもよいことになる。
# -*- encoding: sjis -*-

def all_add(lst, num=1): # num=1がデフォルト引数、デフォルト引数は引数群の後半に書く
    ''' リストの全要素にnumを加える '''
    for i in range(len(lst)):
        lst[i] += num
    return lst

def search_arg_max(dat, *new): # 可変長引数は*newである
    ''' 引数の順序が大事、複数引数を渡す場合、*newの前に引数をすべて定義する必要がある。
        複数の可変長引数は与えられない。可変長引数リストの区切りが分からないからである。
    '''
    if not dat or not new: # どちらかを欠いている場合
        return -1

    # 可変長引数はタプルであることに注意
    return max(max(dat),max(new))

if __name__ == '__main__':
    data = [1, 3, 5, 8, 11]
    print all_add(data) # [2, 4, 6, 9, 12]
    data = [1, 3, 5, 8, 11]
    print all_add(data, 0) # [1, 3, 5, 8, 11] (変化なし)
    data2 = [2, 9, 10]
    # 順序が関数定義とは異なっていても引数に名前をつけて渡せばOK
    print all_add(num=2, lst=data) # [3, 5, 7, 10, 13]
    print search_arg_max(data, 3, 9, 12) # 12

その他、可変長引数で該当する引数が存在しない場合は空のタプルが入力されることにも注意。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計