Вопрос по python, python-2.7 – Передача выражения в качестве аргумента: ключевое слово не может быть выражением

1

Вот мои действия:

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

Почему я не могу передать выражение в качестве аргумента функции?

Ваш Ответ

4   ответа
4

Я думаю, что вы хотите сделать, это передать его как тип glob.

show(*test)  

делая это, вы должны соответствовать вашей подписи arg, поэтому тест должен быть определен как

test = {'d' : True}

или шоу должно быть

def show(result): 
1

Потому что вообще это не имеет смысла. Что вы хотите получить от этого? Назначение не возвращает значение.

Давайте подумаем о нескольких возможностях:

  • The expression should be passed as a function - you should use lambda, or create an actual function.
  • The expression should return a boolean for success - Python raises exceptions on failure, check for those instead.
  • The expression should give None - there is no value to this.

В любом случае, то, что вы пытаетесь сделать, не имеет смысла.

Error: User Rate Limit Exceeded Dmitry Belaventsev
4

Причиной запрета присваивания в выражениях Python является распространенная труднодоступная ошибка в других языках, вызванная этой конструкцией:

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

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

enter image description here

8

= знак указывает Python, что это ключевой параметр, а не позиционный. Так как часть слева от= это выражениеtest["info"] Вы получаете ошибку.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Dmitry Belaventsev

Похожие вопросы