PyQt4 @pyqtSlot: ¿para qué sirve kwarg?

Al leer esto , surgieron dos preguntas:

1. dice

a veces es necesario marcar explícitamente un método Python como una ranura Qt

Aunque siempre uso el decorador @pyqtSlot porque dice:

Conectar una señal a un método Python decorado también tiene la ventaja de reducir la cantidad de memoria utilizada y es un poco más rápido

Me pregunto: ¿en qué casos específicos es necesario? y: ¿Hay alguna ventaja de no usar el decorador @pyqtSlot?

2. El argumento de la palabra clave del resultado, ¿cuál es su propósito?

@pyqtSlot(int, result=int) def foo(self, arg1): """ C++: int foo(int) """ 

Parece el tipo de valor de retorno, pero AFAIK no puede recuperar valores de retorno al emitir señales.

¿Alguna idea sobre eso?

  1. Es más rápido debido a la architecture PyQt. PyQt convierte las ranuras de python en ranuras de C ++, para comunicarse con el marco Qt. Cuando marca explícitamente un método de Python como una ranura Qt y le proporciona una firma de C ++, el código de PyQt no tiene que adivinar la firma de C ++ en sí, ya que ya está especificado. Esto puede mejorar el rendimiento en proyectos pesados.

  2. El valor de retorno solo es necesario cuando desea llamar a la ranura como una función normal.

Edición : Parece que el método QMetaObject.invokeMethod ejecuta una ranura y usa su valor de retorno.