在Python中从主函数以外的地方调用sys.argv是否是不良规范?
我正在写一个脚本,里面有一个函数,叫做 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()
更加灵活和可重复使用。