我编写了一个 python 模块 mymod.py,它也可以用作命令行中的独立程序。
在 mymod.py 中,我定义了一些函数(其中使用关键字设置默认值)和一个if __name__=="__main__"
将模块用作独立程序的块。
我希望有可能覆盖一些默认选项,因此在主程序中我import argparse
并使用它来解析选项。我使用字典来存储默认值,因此如果有一天我需要更改默认值,我可以很容易地只在一个地方修改它的值。
它有效,但我发现代码不是“干净”的,并认为我可能没有以正确的 Python 方式进行操作。
这是一个展示我所做的玩具示例:
#!/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?