コマンドラインからスタンドアロンプログラムとしても使用できるpythonモジュール mymod.py を作成しました。
mymod.py では、いくつかの関数 (キーワードを使用してデフォルト値を設定) とif __name__=="__main__"
、モジュールをスタンドアロン プログラムとして使用するためのブロックを定義しました。
デフォルトのオプションのいくつかをオーバーライドできるようにしたいので、メインプログラムでそれimport argparse
を使用してオプションを解析します。ディクショナリを使用してデフォルト値を保存します。これにより、いつかデフォルト値を変更する必要が生じた場合に、その値を 1 か所だけ変更するだけで簡単に変更できるようになります。
それは機能しますが、コードが「クリーン」ではないことがわかり、おそらく適切なpythonicの方法でそれを行っていないと思いました。
これは私が何をするかを示すおもちゃの例です:
#!/usr/bin/env python
#mymod.py
__default_options__={
"f1_x":10,
"f2_x":10
}
def f1(x=__default_options__["f1_x"]):
return x**2
def f2(x=__default_options__["f2_x"]):
return x**4
# this function is the "core" function which uses f1 and f2
# to produce the main task of the program
def f(x=__default_options__["f1_x"],y=__default_options__["f2_x"]):
return f1(x)+f2(y)
if __name__=="__main__":
import argparse
parser = argparse.ArgumentParser(description = "A toy application")
parser.add_argument("--f1-x",help="the parameter passed to f1",
default=__default_options__["f1_x"], type = float,dest = "x")
parser.add_argument("--f2-x",help="the parameter passed to f2",
default=__default_options__["f2_x"], type = float, dest = "y")
options= parser.parse_args()
print f(options.x,options.y)
私のようにデフォルト値を渡すのは少し面倒で、おそらく Python と argparse の両方の精神に反します。
このコードをより pythonic に改善し、argparse を最大限に活用するにはどうすればよいでしょうか?