关于python参数的问题

def out(no=3368,dd=''):    
    print(no,'   ',dd)
    
if __name__ == '__main__':
    out(sys.argv[1],sys.argv[2])

我这样写,转成tmp.exe

 在命令行里运行:tmp.exe 123  abc 是正常的。

 

但out函数的no是有一个默认参数的。

所以我只想给dd传参,命令行里要怎么写???

如果写tmp.exe abc  就出错,因为少了一个参数。


守着一只汪
浏览 463回答 2
2回答

繁华开满天机

你这样传参, argv[1], argv[2] 将会依次传参给no,和dd如果你想, 当单独输入一个参数就想时, 传参给dd, 只能将函数形参顺序改下:def out(dd='', no=3368514,):这样 当你 tmp.exe 123, 123就会默认传给dd, 不过你这样要注意, 因为已经手动写死 sys.argv[2], 如果你的位置参数不足两个, 将会触发IndexError异常, 所以建议事先做好参数个数的检查if __name__ == '__main__':         argc = len(sys.argv)     # sys.argv[0] 是脚本名字     if argc == 2 :          out(sys.argv[1])     elif argc == 3:         out(sys.argv[1], sys.argv[2])

守着星空守着你

如果你非要用这种位置参数来调用程序,那我建议你用argparse模块, 这个让程序支持选项参数 可修改程序为: tmp.exe -dd abc -no 3358 --cpu amd , 也可以构造一个列表或者是json数据给特定选项等等,具体可以谷歌argpase库用法默认参数主要的使用场景还是在人为指定传参, 例如: out(cpu='amd', dd='abc'..)这样调用函数! 但是你现在是通过tmp.exe x1 x2 x3 x4这样传参, 这些x1,x2..统称叫: 位置参数, 顾名思义, 就是跟位置很有关系,它们将以此存入sys.argv列表中. 所以如果你还是用这种方式去执行脚本,那么我觉得要实现需求难度大
打开App,查看更多内容
随时随地看视频慕课网APP