将表达式作为参数传递:关键字不能是表达式

时间:2012-05-10 16:48:02

标签: python python-2.7

以下是我的行动:

>>> def show(d):
        print d
... 
>>> test = {"result": True}
>>> show(test)
{'result': True}
>>> show(test["info"]="Some info")
  File "<console>", line 1
SyntaxError: keyword can't be an expression

为什么我不能将表达式作为参数传递给函数?

4 个答案:

答案 0 :(得分:8)

=符号向Python表明这是一个关键字参数,而不是位置参数。由于=左侧的部分是表达式test["info"],因此您会收到错误。

答案 1 :(得分:4)

不允许在Python表达式中赋值的原因是由这种结构引起的其他语言中常见的,难以发现的错误:

if (x = 0) {
    // error handling
}
else {
    // code that only works for nonzero x
}

来源http://docs.python.org/faq/design.html#why-can-t-i-use-an-assignment-in-an-expression

enter image description here

答案 2 :(得分:4)

我认为您要做的是将其作为glob类型传递。

show(*test)  

这样做你必须匹配你的arg签名,所以测试必须定义为

test = {'d' : True}

或show必须是

def show(result): 

答案 3 :(得分:1)

因为一般来说没有意义。你想从中获得什么?赋值不返回值。

让我们想一想几个可能性:

  • 表达式应该作为函数传递 - 你应该使用lambda,或者创建一个实际的函数。
  • 表达式应该返回一个成功的布尔值 - Python在失败时引发异常,而不是检查它们。
  • 表达式应该给None - 没有价值。

无论哪种方式,你要做的事情都没有意义。