如何解决为什么 Python3 文档中函数定义的语法似乎需要 parameter_list 中的“/”标记?
funcdef ::= [decorators] "def" funcname "(" [parameter_list] ")"
["->" expression] ":" suite
decorators ::= decorator+
decorator ::= "@" assignment_expression NEWLINE
dotted_name ::= identifier ("." identifier)*
parameter_list ::= defparameter ("," defparameter)* "," "/" ["," [parameter_list_no_posonly]]
| parameter_list_no_posonly
parameter_list_no_posonly ::= defparameter ("," defparameter)* ["," [parameter_list_starargs]]
| parameter_list_starargs
parameter_list_starargs ::= "*" [parameter] ("," ["**" parameter [","]]]
| "**" parameter [","]
parameter ::= identifier [":" expression]
defparameter ::= parameter ["=" expression]
funcname ::= identifier
我对 EBNF 的理解是,上述 parameter_list
的语法需要“,”和“/”字符,因为它们单独出现并且没有包裹在 []
中,也没有跟在 {{ 1}}。显然它们实际上不是必需的,而且 Python 非常乐意接受像 *
这样的基本函数定义,所以这是文档中的错误,还是我误解了如何阅读语法?
解决方法
parameter_list
有 | parameter_list_no_posonly
,所以可以只是 parameter_list_no_posonly
,没有 "," "/"
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。