我在spyder中使用Python 2.7.13。语法错误:关键字arg后的非关键字arg
def test(a,b,c='c',*args):
for item in args:
print item
这个函数定义是有效的Python 2.7,但只要我尝试在args将它传递给我的非关键字ARG关键字ARG后错误:
test(1,2,c='c',10,11)
给出了这样的:
non-keyword arg after keyword arg
但这:
test(1,2,3,4,5)
正在工作。
我不知道有什么问题在这里,因为把*args
bfore c='c'
def test(a,b,*args,c='c'):
for item in args:
print item
这使我在函数定义的错误。
上面的代码仅仅是一个虚拟实例的原代码如下所示:
def export_plot_as_mat(fname, undersamp, undersamp_type, n_comp, b_s, n_iter, fit_alg, transf_alg, alpha_train, alpha_test, export_info=False, *args):
info = ('undersampling=' + str(undersamp) + ' undersampling_type=' +str(undersamp_type) +
' n_comp=' + str(n_comp) + ' batch_size=' + str(b_s) +
' n_iter=' + str(n_iter) + ' fit_alg=' + str(fit_alg) +
' transform_alg=' + str(transf_alg) + ' alpha_train=' +
str(alpha_train) + ' alpha_test=' + str(alpha_test))
d = [(str(args[i]), args[i]) for i in range(len(args))]
if export_info:
d.append('info',info)
sp.io.savemat(fname + '.mat', d)
我希望有出口用于构建我导出数据的参数选项。
更改顺序:'test(1,2,10,11,c ='c')'。 Python会做正确的事情,并在'* args'中收集所有非关键字参数。 – Boldewyn
@Boldewyn这可能工作在python 3.x,但在Python 2.7这给了我错误'测试()有多个值的关键字参数'c'' –
@PedrovonHertwig我希望参数有不同的大小,所以这就是为什么我只是不要传递一个常规参数 –