python ¿qué es la cuerda mágica?
Ya sea Python u otros lenguajes de programación, existen cosas como la cuerda mágica. No es algo exclusivo de Phtyon. Otros similares incluyen el número mágico.
En los últimos dos años, hubo un episodio sobre números mágicos en la actualización de una versión de Linux:
Después de actualizar una versión de Linux, la compatibilidad con controladores para un determinado tipo Apareció el problema de la tarjeta gráfica y luego se corrigió el código relevante. En el código, se agregó directamente un desplazamiento a una dirección, similar a la operación de addr_offset = 123 en Python. Aquí, este 123 es un número mágico. : ¿por qué es 123? ¿Por qué no puede ser 124 o algo más? No hay explicación, no hay razón, simplemente aparece mágicamente, y entonces el problema se resuelve milagrosamente.
Por este motivo, el responsable del proyecto Linux se molestó mucho y dijo malas palabras en el proyecto.
Ya sea una cuerda mágica o un número mágico, colectivamente se les llama valor mágico, es decir, valor mágico.
Aparecen repentinamente en el código, se usan directamente, sin explicación y no se pueden rastrear.
Esto tiene efectos negativos en la legibilidad y mantenibilidad del código.
Para tomar un ejemplo simple, en Python, a veces usamos zipfile para procesar archivos comprimidos, como este: z_file.writestr(z_name,?data,?zipfile.ZIP_DEFLATED)
Pero si se escribe como: z_file.writestr(z_name,?data,?8)
Entonces, este 8 es un valor mágico: ¿qué es? ¿De dónde vino? ¿Por qué 8 en lugar de 9? A menos que lea la documentación o el código fuente de zlip, no sabrá qué es este 8. Si usa `zipfile.ZIP_DEFLATED`, incluso si no conoce zlip, cuando vea este nombre constante, sabrá que es una selección zip comprimida (desinflada).
El valor mágico significa que necesitamos saber mucho sobre él antes de poder comprender una línea de código, y se necesita la misma cantidad de energía para modificar su funcionalidad o corregir sus errores.
Tome otro ejemplo: def?getfileencode(file):
"""Pruebe el formato de codificación que puede usarse para archivos de tipo texto
No Debe ser correcto
gt;gt;gt;?getfileencode('errorlog.txt')
'utf_8_sig'
gt;gt;gt;? getfileencode('star.txt')
'gb18030'
gt;gt;gt;?getfileencode(r'D:/Python/baseweb\\app.py')
'utf_8'
"""
códigos?=?['utf_8',?'utf_16',?'gb18030',?'big5']
con?open(archivo,?'rb')?as?f:
b?=?f.read()()
para? code?in?codes:
prueba:
b.decode(code)
if?code?==?'utf_8'?and?b. comienza con (b'\xef\xbb\xbf'):
código?=?'utf_8_sig'
romper
excepto?(Excepción,):
continuar
return?code
b'\xef\xbb\xbf' en la línea 17 es un valor mágico. ¿Por qué es este valor? Sólo cuando comprenda que Windows (MS) ha agregado este párrafo al principio del archivo de texto codificado en UTF-8 como símbolo de esta codificación podrá comprender por qué está escrito así. Si lo nombramos como una constante: UTF8_BOM?=?b'\xef\xbb\xbf'
Entonces escribe el if en el código así: if?code?==?'utf_8'?and ?b.startswith(UTF8_BOM)
No necesitas saber nada sobre lo que Microsoft agrega delante del archivo UTF-8 para saber qué significa este juicio: si está codificado en UTF-8 y se inicia con BOM... …
Esta es la forma más común de evitar valores mágicos en su código.