私は主に Python でコマンドライン スクリプトを作成するために argparse を使用してきました。私が一般的に使用するイディオムは、引数をオブジェクトの属性として割り当ててから、それらを個別に解析して、その属性名に一致する変数にするというものです。これは少し繰り返しのようです。それらすべてをグローバル名前空間に割り当てて、割り当て手順を切り取る方法はありますか? または、Pythonの動作が直感に反するように見える場合によくあることですが、賢明なPythonの専門家は、これを行うべきではない、またはこれを行いたいという正当な理由があることを指摘できますか?
私が今持っているのはこれです:
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--db",type=str, dest='db', nargs='?', default="test")
parser.add_argument("--collection",type=str, dest='collection', nargs='?', help="Collection, default is test", default="test")
args = parser.parse_args()
db = args.db # gross!
collection = args.collection # yuck!
print(db)
print(collection)
これが欲しいのは:
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--db",type=str, dest='db', nargs='?', default="test")
parser.add_argument("--collection",type=str, dest='collection', nargs='?', help="Collection, default is test", default="test")
parser.SUPER_parse_args() # now, db and collection are already in the namespace!
print(db)
print(collection)
引数が 2 つしかない場合はそれほど多くないように思えますが、10 個程度の場合、args オブジェクトに既に存在する属性の名前をグローバル名前空間に変更する割り当て手順を 2 倍にすると、バグが発生し始めます。