关于python变长参数的调用的问题

关于python变长参数的调用的问题

def dictVarArgs(arg1, arg2 = "defaultB", *unkeyVar, **theRest):
    print 'formal arg1:', arg1
    print 'formal arg2:', arg2
    for eachUnkey in unkeyVar:
        print 'unkey: %s' % eachUnkey

    for eachXtrArg in theRest.keys():
        print 'Xtra arg %s: %s' % (eachXtrArg, str(theRest[eachXtrArg]))

dictVarArgs(3, arg2 = 1,  *(4, 5), **{'1':0, '2':8})

这段代码运行就会出错,不明白怎么就错了,请指点


QUOTE:
def dictVarArgs(arg1, arg2 = "defaultB", *unkeyVar, **theRest):
    print 'formal arg1:', arg1
    print 'formal arg2:', arg2
    for eachUnkey in unkeyVar:
        print 'unkey: %s' % eachUnkey

    for eachXtrArg in theRest.keys():
        print 'Xtra arg %s: %s' % (eachXtrArg, str(theRest[eachXtrArg]))

dictVarArgs(3, arg2 = 1,  *(4, 5), **{'1':0, '2':8})

这段代码运行就会出错,不明白怎么就错了,请指点

SyntaxError: non-keyword arg after keyword arg
关键字参数要放在位置参数的后面。
终于搞明白这个问题了,传入参数时,位置参数要在最前面,关键字参数其次,变长参数再次,关键字变长参数最后
这个问题我也没搞明白,你这么调是位置参数在前,其次是关健自参数,然后才是变长及关键字变长参数啊
dictVarArgs(3, arg2 = 1,  *(4, 5), **{'1':0, '2':8})
能否说说,谢谢


QUOTE:
原帖由 Mikeshew.ca 于 2007-2-8 17:31 发表
这个问题我也没搞明白,你这么调是位置参数在前,其次是关健自参数,然后才是变长及关键字变长参数啊
dictVarArgs(3, arg2 = 1,  *(4, 5), **{'1':0, '2':8})
能否说说,谢谢

dictVarArgs(arg1 = 3, 1,  *(4, 5), **{'1':0, '2':8})   #出错
dictVarArgs(3, 1,  *(4, 5), **{'1':0, '2':8})  #不错

你可以自己试一下,不好说,非要多试几次就明白了


QUOTE:
原帖由 lijihuai 于 2007-2-9 00:22 发表


dictVarArgs(arg1 = 3, 1,  *(4, 5), **{'1':0, '2':8})   #出错
dictVarArgs(3, 1,  *(4, 5), **{'1':0, '2':8})  #不错

你可以自己试一下,不好说,非要多试几次就明白了

你这么调用当时是会有问题,但
dictVarArgs(3, arg2=1,  *(4, 5), **{'1':0, '2':8})   为什么也会出错呢