Skip to main content
 首页 » 编程设计

python之为什么我不能将对字典值的直接引用传递给函数

2025年05月04日12sxdcgaq8080

今天早些时候我问了一个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 "]"