我想创建一个可以接受1个或2个参数的函数。 目前,我有一个函数,它通过CMD接受两个参数:
def test(self,countName,optionalArg):
if countName == "lowest":
#something
if optionalArg == "furthest:
#something
else:
#something else
if __name__ == '__main__':
countName = sys.argv[1]
optionalArg = sys.argv[2]
temp = len(sys.argv)
for i in xrange(1,temp):
sys.argv.pop()
然后我会跑:
python filename.py lowest furthest
使用这意味着必须传递第二个参数。如果我试图通过传递一个参数来运行脚本,它会遇到一个错误(如预期的那样)。我的问题是,如何创建一个可选参数,它可以被传递,也可以不被传递,这取决于具体情况?
例如:
python filename.py lowest
在这种情况下,我希望程序执行“#其他”脚本,因为没有传递任何内容,而且它与“最远”不同。
请不要为我编写代码,我是来学习的:)
这在FineManual(tm)中有解释:https://docs.python.org/2/tutorial/controlflow.html#more-on-defining-functions
注意,在Python中,定义可选参数默认值的表达式在执行
def
语句(这是顶级函数的第一次导入)时仅为eval'd ony一次,这可能会导致意外行为(cf"Least Astonishment" and the Mutable Default Argument)。此外,“默认值”必须是表达式,而不是语句,因此不能在此处进行任何错误处理。wrt/您尝试使用
sys.argv[2]
作为默认值的情况,至少有两个原因是错误的:len(sys.argv) < 3
sys.argv
,因此您不能在不同的上下文中重用它这里正确的解决方案是处理“入口点”代码(即
__main__
部分)中的所有用户输入(sys.argv
或其他内容)-您的函数不应该知道参数值来自何处(sys.argv
、HTTP请求、文本文件或其他内容)。因此,长话短说:要么使用硬编码值(如果有意义的话)要么使用“sentinel”值(
None
是一个很好的候选者)作为可选参数的默认值,并在__main__
部分(或者在main()
部分调用的__main__
函数中执行所有用户输入解析,这样就不会污染模块的具有不相关变量的命名空间):通过向要忽略的参数提供默认参数值(如optionalArg=None(无论您想要什么)),可以编写函数。通过这样做,您可以使用单个参数调用函数。
像这样的?有点代码对不起:D
相关问题 更多 >
编程相关推荐