2

这是我的行动:

>>> 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

4 回答 4

8

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

于 2012-05-10T16:54:54.490 回答
5

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

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

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

在此处输入图像描述

于 2012-05-10T16:58:18.687 回答
4

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

show(*test)  

这样做你必须匹配你的 arg 签名所以 test 必须被定义为

test = {'d' : True}

或表演必须是

def show(result): 
于 2012-05-10T17:09:36.790 回答
1

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

让我们考虑几种可能性:

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

无论哪种方式,您尝试做的事情都没有意义。

于 2012-05-10T16:50:57.680 回答