为什么我不能直接传递字典值的引用给函数?

2024-06-26 14:56:31 发布

您现在位置:Python中文网/ 问答频道 /正文

今天早些时候我问了a question 关于将字典值传递给函数。虽然我现在明白了如何完成我一直在努力完成的事情,但为什么这个问题(没有被问到)一直没有得到回答。所以我的后续行动是为什么我不能

def myFunction(newDict['bubba']):
    some code to process the parameter

仅仅是因为解析器规则不允许这样做吗?我在google上搜索了+Python+function+“allowable parameters”,但没有找到任何有用的信息,所以我希望能提供任何信息。在

我太简单化了。我有一本字典,它的结构像

^{pr2}$

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

 def myFunction(outerkey,myDict[outerkey]):

给出了一个语法错误,我很容易想到这一定是一个解析问题。在


Tags: theto函数信息字典defcodesome
3条回答

看起来您可能会混淆函数的定义和调用该函数。举个简单的例子:

def f(x):
    y = x * x
    print "x squared is", y

这个函数本身不执行任何操作(即不打印任何内容)。如果您将其放入源文件并运行,则不会输出任何内容。但如果你加上:

^{pr2}$

你会得到输出“x的平方是25”。当Python遇到后面跟有实际参数的函数名时,它会用这些实际参数的值替换函数定义中的形式参数。在本例中,形式参数称为x。然后Python运行函数f,其值x为5。现在,最大的好处是可以使用不同的值再次使用相同的函数:

f(10)

打印“x的平方是100”。在

我希望我已经正确地理解了你困难的根源。在

只能将引用传递给对象。在

a = { 'a' : 123, 'b' : [ 1, 2, 3 ] }

def f(dictionary_value):
    dictionary_value.append(4)

f( a['b'] )

做你所期望的。Dictionary元素a['b']通过引用传递给更新Dictionary元素的函数f。在

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

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

由于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 | "_")*

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

^{pr2}$

相关问题 更多 >