Desempaquetar argumentos de palabras clave, pero solo los que coinciden con la función

Digamos que tengo una función:

def foo(a=None, b=None, c=None):
  return "a:%s, b:%s, c:%s" % (a, b, c)

Tengo un diccionario con algunos (o ninguno) de los argumentos anteriores, pero también con claves que no tienen nombres en la función, por ejemplo:

d = {'a': 1, 'x': 4, 'b': 2, 'y': 5}

Si llamo a lo siguiente obtendré un error, porque 'x' y 'y' no son argumentos de palabras clave en la función foo.

foo(**d)  # error

¿Existe una manera elegante de pasar los argumentos de un diccionario a una función, pero solo los valores con claves que coinciden con los argumentos de la función?

Por favor, corríjame si mi terminología de argumento / parámetro está desactivada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta