为什么我不能直接引用字典值到函数?

PyN*_*bie 1 python parameters dictionary function

今天早些时候,我问了一个问题, 关于传递字典值的函数.虽然我现在明白如何完成我想要完成的事情,但为什么问题(未被问到)从未得到回答.所以我的跟进就是为什么我不能

def myFunction(newDict['bubba']):
    some code to process the parameter
Run Code Online (Sandbox Code Playgroud)

是因为解析器规则不允许这样做吗?我用Google搜索+ Python +函数+"允许参数",但没有找到任何有用的信息,所以我会感激任何信息.

我过于简单化了.我有一个结构相似的字典

myDict={outerkey1:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),outerkey2:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),. . .}
Run Code Online (Sandbox Code Playgroud)

正如我所说,我知道如何做我想要的 - 我得到了一个非常有用的答案.但我开始想知道为什么

 def myFunction(outerkey,myDict[outerkey]):
Run Code Online (Sandbox Code Playgroud)

给出了一个语法错误,我发现它必须是一个解析问题.

cdl*_*ary 6

是的,解析器将拒绝此代码.

参数列表用于函数定义,以将函数内的标识符绑定到在调用时从外部传入的参数.

由于newDict['bubba']它不是有效的标识符,因此没有任何意义 - 您需要将其作为调用参数而不是函数参数提供,因为函数参数只能是标识符.

因为您似乎对正式语法感兴趣,所以这里是相关部分:

funcdef ::= 
             [decorators] "def" funcname "(" [parameter_list] ")"
              ":" suite

parameter_list ::= 
                 (defparameter ",")*
                (~~"*" identifier [, "**" identifier]
                 | "**" identifier
                 | defparameter [","] )

defparameter ::= 
             parameter ["=" expression]

identifier ::= 
             (letter|"_") (letter | digit | "_")*
Run Code Online (Sandbox Code Playgroud)

实际上,您尝试用作标识符的构造是订阅:

subscription ::= 
             primary "[" expression_list "]"
Run Code Online (Sandbox Code Playgroud)