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 就出错,因为少了一个参数。
2 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
你这样传参, 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])
守着星空守着你
TA贡献1799条经验 获得超8个赞
如果你非要用这种位置参数来调用程序,那我建议你用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列表中. 所以如果你还是用这种方式去执行脚本,那么我觉得要实现需求难度大
- 2 回答
- 0 关注
- 454 浏览
添加回答
举报
0/150
提交
取消