为了账号安全,请及时绑定邮箱和手机立即绑定

关于python参数的问题

关于python参数的问题

守着一只汪 2018-07-16 14:21:36
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])


查看完整回答
反对 回复 2018-07-17
?
守着星空守着你

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列表中. 所以如果你还是用这种方式去执行脚本,那么我觉得要实现需求难度大

查看完整回答
反对 回复 2018-07-17
  • 2 回答
  • 0 关注
  • 454 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信