Pasando expresión como argumento: la palabra clave no puede ser una expresión

Aquí están mis acciones:

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

¿Por qué no puedo pasar la expresión como argumento a una función?

El signo = indica a Python que este es un parámetro de palabra clave, no uno posicional. Dado que la parte a la izquierda de = es una test["info"] expresión test["info"] aparece el error.

Creo que lo que quieres hacer es pasarlo como un tipo global.

 show(*test) 

haciendo esto debe coincidir con su firma arg para que la prueba tenga que definirse como

 test = {'d' : True} 

o show tendra que ser

 def show(result): 

La razón para no permitir la asignación en expresiones de Python es un error común y difícil de encontrar en esos otros idiomas, causado por esta construcción:

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

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

introduzca la descripción de la imagen aquí

Porque en general no tiene sentido. ¿Qué quieres obtener de eso? La asignación no devuelve un valor.

Pensemos en algunas posibilidades:

  • La expresión debe pasarse como una función, debe usar lambda o crear una función real.
  • La expresión debería devolver un valor booleano para el éxito: Python genera excepciones en caso de fallo, verifique si existen.
  • La expresión debe dar None , no hay ningún valor para esto.

De cualquier manera, lo que estás tratando de hacer no tiene sentido.