我在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我希望參數有不同的大小,所以這就是爲什麼我只是不要傳遞一個常規參數 –