我正在检查python grammar specification,而python中的函数是使用BNF定义的。
funcdef: 'def' NAME parameters ['->' test] ':' suite
parameters: '(' [typedargslist] ')'
typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [
'*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]]
| '**' tfpdef [',']]]
| '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]]
| '**' tfpdef [','])
tfpdef: NAME [':' test]
问题出在这里:我认为python在默认参数之前不允许使用非默认参数,但显然BNF定义另有说明。我在python 3.5中检查过它会引发这样的错误。
def my(c=1,a:1*2,*,b):
^
SyntaxError: non-default argument follows default argument
任何人都可以告诉我哪一个是对的吗?
答案 0 :(得分:0)