Python asignación aumentada para operadores booleanos

¿Python tiene instrucciones de asignación aumentadas correspondientes a sus operadores booleanos?

Por ejemplo puedo escribir esto:

x = x + 1 

o esto:

 x += 1 

¿Hay algo que pueda escribir en lugar de esto?

 x = x and y 

¿Para evitar escribir “x” dos veces?

    Tenga en cuenta que conozco sentencias que usan & =, pero estaba buscando una sentencia que funcionaría cuando y es de cualquier tipo, no solo cuando y es booleano.

    No, no hay un operador de asignación aumentada para los operadores booleanos .

    Existe una asignación aumentada para dar a los operandos de la mano izquierda modificables la oportunidad de alterar el objeto en el lugar, en lugar de crear un nuevo objeto. Los operadores booleanos, por otro lado, no se pueden traducir a una operación en el lugar; para x = x and y , o bien vuelve a enlazar x con x , o lo haces con y , pero x no cambiaría.

    Como tal, x and= y serían en realidad bastante confusos; o bien x no se modificará, o se reemplazará por y .

    A menos que tenga objetos booleanos reales, no use las asignaciones aumentadas &= y |= para los operadores bitwise . Solo para los objetos booleanos (por lo tanto, True y False ) están los operadores sobrecargados para producir la misma salida que los operadores and y or y. Para otros tipos, resultarán en un TypeError o se aplicará una operación completamente diferente . Para los enteros, eso es una operación a nivel de bits, configura la sobrecarga para hacer intersecciones.

    La expresión equivalente es &= para and y |= para or .

     >>> b = True >>> b &= False >>> b False 

    Tenga en cuenta en modo bitwise AND y bitwise AND y en modo bitwise OR y solo funcionará (como espera) para los tipos bool . bitwise AND es diferente de logical AND para otros tipos, como numérico

     >>> bool(12) and bool(5) # logical AND True >>> 12 & 5 # bitwise AND 4 

    Consulte esta publicación para obtener una discusión más detallada de las operaciones lógicas contra bitwise en este contexto.