微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Python3 文档中函数定义的语法似乎需要 parameter_list 中的“/”标记?

如何解决为什么 Python3 文档中函数定义的语法似乎需要 parameter_list 中的“/”标记?

python3 文档中的相关 section

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 举报,一经查实,本站将立刻删除。