Python 为什么使用def main(argv=[[uuuuuu name][uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__主要内容:系统出口(主(系统argv))?

Python 为什么使用def main(argv=[[uuuuuu name][uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__主要内容:系统出口(主(系统argv))?,python,command-line,sys,Python,Command Line,Sys,我正在处理/重写一段代码,该代码首先定义了一个函数,如下所示: def main(argv=[__name__]): ... *rest of code* ... 最后是: if __name__ == "__main__": sys.exit(main(sys.argv)) 我的印象是,这样做是为了检查脚本是否从命令行执行,然后在退出python时使用提供的参数运行函数main。但是,为什么需要在函数定义中将变量argv预设为[\uu\u名称]?这不是我的代

我正在处理/重写一段代码,该代码首先定义了一个函数,如下所示:

def main(argv=[__name__]):
    ...
    *rest of code*
    ...
最后是:

if __name__ == "__main__":
    sys.exit(main(sys.argv))
我的印象是,这样做是为了检查脚本是否从命令行执行,然后在退出python时使用提供的参数运行函数
main
。但是,为什么需要在函数定义中将变量
argv
预设为
[\uu\u名称]
?这不是我的代码,所以我不知道这背后的初衷。然而,我还不熟悉使用
if\uuuuu name\uuuu==“\uuuuu main\uuuuu”:
行来抽查命令行的执行情况,所以我可能不知道这种语法有什么明显的原因。任何有关
main
函数定义和参数/命令行与模块测试的帮助或进一步详细信息将不胜感激。

main()
定义允许以文件底部的
sys.exit()
行以外的其他方式调用
main()
。这可能是防御性编程的一个示例,也可能表明此文件的其他受支持的用途

另一种受支持的用法可能是从另一个Python程序调用它,如下所示:

import your_module
your_module.main()
main()
定义允许以文件底部的
sys.exit()
行以外的其他方式调用
main()
。这可能是防御性编程的一个示例,也可能表明此文件的其他受支持的用途

另一种受支持的用法可能是从另一个Python程序调用它,如下所示:

import your_module
your_module.main()

至于
argv=[\uuuuu name\uuuu]
,原始开发人员可能希望保留不从命令行(即由另一个模块调用)运行此函数的选项,并提供了
\uuuu name\uuuu
,因为它对某些功能使用了
sys.argv[0]


main
函数与python无关,只是一些约定(源自
C
等语言)
sys.exit(main(sys.argv))
将触发
sys.exit
函数,其退出代码相当于使用收到的命令行参数运行
main
函数的结果
main
可能应该返回一个适当的退出代码(
0
表示OK,其他表示各种异常)。

至于
argv=[\uu name\uuuu]
,原始开发人员可能希望保留不从命令行(即由另一个模块调用)运行此函数的选项,并提供了
\uuuu name\uuuu
,因为它使用了
sys.argv[0]
来实现某些功能


main
函数与python无关,只是一些约定(源自
C
等语言)
sys.exit(main(sys.argv))
将触发
sys.exit
函数,其退出代码相当于使用收到的命令行参数运行
main
函数的结果
main
可能应该返回适当的退出代码(
0
表示OK,其他表示各种异常)。

从CLI运行脚本时,
argv[0]
是脚本的名称,而
argv
的其余部分是命令行参数。因此,
main()
的其余部分可能期望始终填充
argv[0]


默认值是确保导入文件而不是直接运行文件时,
argv[0]
中包含类似的内容。在本例中,它是模块的名称。

从CLI运行脚本时,
argv[0]
是脚本的名称,其余的
argv
是命令行参数。因此,
main()
的其余部分可能期望始终填充
argv[0]


默认值是确保导入文件而不是直接运行文件时,
argv[0]
中包含类似的内容。在本例中,它是模块的名称。

sys.exit()一点也不奇怪,我们的知识库中已经有(回答了!)关于在那里使用的实践的问题,将
\uu name\uuuuuuuu
\uuu main\uuuuu
进行比较。请考虑缩小你的问题,不再有重复的成分;可以说,跨越预先回答和未回答的问题使其“过于宽泛”…许多问题中的一个例子是:
sys.exit()
,我们的知识库中已经有(回答了!)关于在那里使用的实践的问题,将
\uu name\uuuuuuuu
\uu main\uuuuuuu
进行比较。请考虑缩小你的问题,不再有重复的成分;可以说,跨越预先回答和未回答的问题使其“过于宽泛”…众多问题中的一个例子:嗯。。。有趣。原始代码在
main()
函数中根本不使用
sys.arvg[0]
或argv的任何元素。如果此函数作为模块而不是在命令行之外运行,那么这样定义argv是否可以确保main()函数始终使用作为模块调用此函数的脚本的命令行参数中特定的参数?如果此函数不使用
argv
,那么它作为参数使用就没有意义了。否则,您可以通过发送自定义参数来控制主要功能(或确保它们与默认的
argv
)Hmmm。。。有趣。原始代码在
main()
函数中根本不使用
sys.arvg[0]
或argv的任何元素。如果此函数作为模块而不是在命令行之外运行,那么像这样定义argv会确保main()函数始终使用命令行中特定的参数吗