在Python中从主函数以外的地方调用sys.argv是否是不良规范?

3 投票
7 回答
797 浏览
提问于 2025-04-16 01:58

我正在写一个脚本,里面有一个函数,叫做 f(),它需要一个命令行参数(一个需要打开的文件名)。不过,f() 并不是直接在主函数里被调用的。

我在想,直接在 f() 里调用 sys.argv[1] 这样做算不算不好的编码习惯?如果不这样做,我就得把这个参数传递给所有最终调用 f() 的函数。

7 个回答

3

你应该把文件名传递给 f() 这个函数。这样的话,如果你以后想用这个函数(比如作为模块函数),就不需要依赖 sys.argv 了。

如果你觉得麻烦,或者想让你的“主”代码看起来更整洁,你可以为 f() 写一个包装函数,做的事情类似于:

def wrapperf():
    return f(sys.argv[1])

如果你想让 wrapperf 只在 main() 里面使用,可以把它定义在 main() 里,这样其他脚本在导入你的模块时就不会看到它。

4

在你的主程序以外的地方访问 sys.argv 是不太好的做法,因为这样会让你的代码和命令行紧密联系在一起,这样就很难在其他 Python 脚本中使用它。

6

总是认为你的函数需要的参数都能在命令行上找到,这样做其实是不太好的习惯——如果这个代码是通过其他方式调用的呢?

一个函数应该明确声明它需要哪些输入参数。

至少,把必要的参数传递给 f(),而不是直接去访问 sys.argv,这样可以让 f() 更加灵活和可重复使用。

撰写回答