こんにちはー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型のcl
にcalcmodule.calcfactor
の1から100までを加える処理をループで書いてみました。
ここでは関数を例にして書きましたが、ご安心ください。基本的に一般のpythonのモジュールたちはそんな面倒な名前の付け方をしていません。
じゃあ、こんなのどこで使うんだって話ですが、これが生きるのが、djangoのモデルとか作る時です。 「個数は決まっているけど、その時々によって意味合いが違うもの」とかは、q1, q2...などとつけたりすることも多いでしょう。 そんな時こそ、呼び出しの関数としてexecを使えば、一括で管理できて楽にできますね。
では良いpythonライフを〜