Su tarea es escribir algún código en Python 2 o 3 de modo que esta expresión:
(a+b)(c+d) == a*c + b*c + a*d + b*d
evaluará a Truesin plantear ninguna excepción.
Para aclarar, copiaré su código en un archivo, luego fromel archivo import *. Luego escribiré la expresión en la consola y verificaré que sea así True.
Este es el código de golf, por lo que gana la respuesta con la longitud más corta (en bytes).

0 .__mul__paralambda y:0pero es de la misma longitud.x.countGuarda un byte.type(t(), t())ot().type(t())lanza una excepción, entonces, ¿qué sucede cuando lo hacest() + t()?__add__se llama con dos, pero el primero se interpreta comoself, solootherse pasa atype. Raro si.a + bprimeros intentosa.__add__(b).a.__add__es decirtype, eso se conviertetype(b). La diferencia clave entre este caso y el caso habitual de los métodos es que, pora.__add__lo general, sería un objeto diferente del que se estableció__add__en la definición de clase, debido al protocolo descriptor , que implementan los objetos de función ordinarios. (También hay algunas otras partes difíciles que no son relevantes aquí.)54 bytes
Hacer un objeto que herede de
int, excepto que agregar o llamar solo devuelve una copia de sí mismo.Mismo largo:
Pensé
mino{}.getfuncionaría en lugar delambda a,b:a, pero por alguna razón actúan solo en el segundo argumento.fuente
minya tiene un__self__atributo, por lo que la clase omite vincularse a sí misma. Por quémintiene__self__otra pregunta ...mintiene un__self__.min.__self__es solo un artefacto de cómo se implementan las funciones integradas y los métodos integrados como el mismo tipo.minno funciona aquí porque, a diferencia de las funciones escritas en Python, las funciones integradas no admiten el protocolo descriptor, que es responsable de vincular el primer argumento.8166 bytesfuente
68 bytes
Si bien no puede competir realmente con las respuestas existentes, esta realmente realiza el cálculo en cuestión:
Explicación:
sympy.abccontiene todos los símbolos de una sola letra, en las particulares nombradosa,b,c, yd.a+bes unAddobjeto, que representa una suma general.type(a+b).__call__= […]monkey parchea laAddclase para darle capacidades de evaluación, en este caso permitiéndole funcionar como una multiplicación de quien llama y quien llama.expandes necesario para que las expresiones sean realmente iguales (ya que SymPy solo realiza comprobaciones de igualdad exhaustivas bajo demanda).fuente