我主要使用argparse在python中创建命令行脚本,我通常使用的习惯用法是将参数指定为对象的属性,然后将它们分别解析为与其属性名称匹配的变量.这似乎有点重复.有没有办法将它们全部分配到全局命名空间并删除分配步骤; 或者通常情况下,某些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)
Run Code Online (Sandbox Code Playgroud)
我想要的是:
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)
Run Code Online (Sandbox Code Playgroud)
当我只有2个参数时似乎并不多,但是如果我有10个左右,那么将赋值步骤加倍,我在args对象中已经存在的属性重命名为全局命名空间,开始让我感到烦恼.
你可以这样做globals:
globals().update(args.__dict__)
Run Code Online (Sandbox Code Playgroud)
但是,你真的*不应该这样做.从蟒蛇的禅宗,
命名空间是一个很棒的主意 - 让我们做更多的事情吧!
我会回应@Martijn在评论中所说的话:
别.只是不要.我会
args直接使用.
保持尽可能分开的东西.它使代码更易于维护和易于理解.
| 归档时间: |
|
| 查看次数: |
6921 次 |
| 最近记录: |