gpt4 book ai didi

python - python argparse的范围是什么

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:26 25 4
gpt4 key购买 nike

这可能是个愚蠢的问题,但我似乎无法弄明白。

考虑这个简单的场景:

# file a.py
from b import foo
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-a')
args = parser.parse_args()

# file b.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-b')
args = parser.parse_args()

foo = 1

[提示]# python a.py --help

usage: a.py [-h] [-b B]

optional arguments: -h, --help show this help message and exit -b B

我不明白的是 a.py 为什么接受参数 'b' 而不是 'a'另一方面,如何只导入一个变量而不是整个文件? 'from b import foo' 不应该处理它吗?

编辑:我已经发布了另一个与同一问题相关的问题,因为我仍然不知道如何解决我的问题 (is there a way to clear python argparse?)

最佳答案

from b import foo大致等同于:

import b
foo = b.foo
del b

虽然它“只导入foo”,它仍然运行b.py 顶层的所有语句(无论如何 foo 都是有用的),包括对 parse.parse_args() 的调用.此调用将打印帮助文本并完全忽略 argparse来电a.py仅仅是因为那些还没有发生。

如果你想让你的模块能够添加参数,你需要分开创建ArgumentParser从调用 parse_args .例如,您可以有一个单独的 args模块:

# file args.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--common')
...

a.py 都将使用它和 b.py :

# file a.py
from b import foo
import args
args.parser.add_argument('-a')

# only actually parse args if we are invoked as main script; mere `import a`
# shouldn't run the parser
if __name__ == '__main__':
args = parser.parse_args()
...

# file b.py
import args
args.parser.add_argument('-b')

foo = 1

关于python - python argparse的范围是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com