今天早些时候我问了一个question 关于将字典值传递给函数。虽然我现在明白如何完成我试图完成的事情,但从未回答过为什么问题(没有被问到)。所以我的后续行动是为什么我不能
def myFunction(newDict['bubba']):
some code to process the parameter
仅仅是因为解析器规则不允许这样做吗?我在谷歌上搜索了 +Python +function +“允许的参数”,但没有找到任何有用的信息,因此我将不胜感激。
我过于简单化了正在发生的事情。我有一本结构如下的字典
myDict={outerkey1:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),outerkey2:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),. . .}
正如我所说,我知道如何做我想做的事——我得到了一个非常有帮助的答案。但我开始想知道为什么
def myFunction(outerkey,myDict[outerkey]):
给出了一个语法错误,我很好地想到它必须是一个解析问题。
请您参考如下方法:
是的,解析器将拒绝此代码。
参数列表在函数定义中用于将函数内的标识符绑定(bind)到从外部调用传入的参数。
因为 newDict['bubba'] 不是有效的标识符,所以这没有任何意义——您需要将它作为调用参数而不是函数参数提供,因为函数参数只能是标识符。
因为你似乎对 formal grammar 感兴趣, 以下是相关部分:
funcdef ::=
[decorators] "def" funcname "(" [parameter_list] ")"
":" suite
parameter_list ::=
(defparameter ",")*
(~~"*" identifier [, "**" identifier]
| "**" identifier
| defparameter [","] )
defparameter ::=
parameter ["=" expression]
identifier ::=
(letter|"_") (letter | digit | "_")*
事实上,您尝试用作标识符的结构是订阅:
subscription ::=
primary "[" expression_list "]"
