アメリエフの技術ブログ

Amelieff Staff Blog

pythonで連番の関数実行や呼び出し

こんにちはーhr-kです。

今日は久しぶりにpythonのお話です。

みなさん、pythonを使っていてこんなことないですか??

「なんかモジュール中の関数の名前がcalcfactor1、calcfactor2, ...calcfactor100とかってなってる。確かに正式にfactor10とかって名前なんだけど、この連番の関数をcalcfactor1 ... calcfactor10まで実行した結果を格納したいんだけど、どうするん?」

はい、これ面倒ですね。

例として、calcmoduleのモジュール中にcalcfactor1, calcfactor2, calcfactor100という100個の関数があるとしましょう。 この時、連番の関数を全部実行するには愚直に書くと

import calcmodule

cl1 = calcmodule.calcfactor1()
cl2 = calcmodule.calcfactor2()
...
cl100 = calcmodule.calcfactor100()

と。はい面倒です。100個の関数とか書きたくないですね。

ここで役立つのは「括弧内の文字列をpythonのコードとして実行する」execという関数です。 ではexecを使って書いてみましょう。

import calcmodule

cl = []
for i in range(100):
    num = i + 1
    exec('cl.append(calcmodule.calcfactor%d())' % num)

はい、これで100個分。 簡単ですね。

ここでは「list型のclcalcmodule.calcfactorの1から100までを加える処理をループで書いてみました。

ここでは関数を例にして書きましたが、ご安心ください。基本的に一般のpythonのモジュールたちはそんな面倒な名前の付け方をしていません。

じゃあ、こんなのどこで使うんだって話ですが、これが生きるのが、djangoのモデルとか作る時です。 「個数は決まっているけど、その時々によって意味合いが違うもの」とかは、q1, q2...などとつけたりすることも多いでしょう。 そんな時こそ、呼び出しの関数としてexecを使えば、一括で管理できて楽にできますね。

では良いpythonライフを〜