Red de conocimiento informático - Conocimiento del nombre de dominio - Resumen de varios principios de diseño de métodos de funciones de Python

Resumen de varios principios de diseño de métodos de funciones de Python

En cualquier lenguaje de programación, la aplicación de funciones se debe principalmente a las dos situaciones siguientes:

1. Los bloques de código se repiten. En este momento se debe considerar el uso de funciones. para reducir la redundancia del programa.

2. Cuando el bloque de código es complejo, puede considerar el uso de funciones para mejorar la legibilidad del programa.

Cuando el proceso es lo suficientemente complejo. , debes considerar las funciones y cómo usarlas. Al diseñar funciones en Python, consideramos principalmente tres aspectos: tamaño de función, agregación y acoplamiento. Estos tres aspectos deben atribuirse al alcance de la planificación y el diseño. Alta cohesión y bajo acoplamiento son los principios generales del diseño de funciones en cualquier idioma.

1. Cómo descomponer las tareas en funciones más específicas, lo que conduce a la agregación

2. Cómo diseñar la comunicación entre funciones también implica el acoplamiento

3. diseñar el tamaño de una función para fortalecer su agregación y reducir su acoplamiento

Agregación

Cada función solo hace una cosa

Programación perfecta, cada función solo debe haz una cosa.

Por ejemplo: Meter un elefante en el frigorífico implica tres pasos: abrir la puerta, meter el elefante dentro y cerrar la puerta.

De esta manera, debes escribir tres funciones en lugar de una función para hacer todo. De esta manera, la estructura es clara y en capas, ¡lo que la hace fácil de entender!

Tamaño

Mantenlo simple, mantenlo breve

Python es un lenguaje orientado a procesos y un lenguaje orientado a objetos, pero sirve más como un Rol del lenguaje de scripting.

Para la misma función, la longitud del código usando Python puede ser 1/3 de la de C/C/Java y otros lenguajes. ¡Unos pocos cientos de líneas de código pueden lograr bastantes funciones!

Si una función diseñada en el proyecto requiere pasar páginas para leerse, considere dividir la función.

Entre los más de 200 módulos que vienen con Python, es raro ver una función con dos o tres páginas.

El código Python es conocido por su simplicidad y claridad, y una función que es demasiado larga o profundamente anidada es a menudo un signo de un defecto de diseño.

Acoplamiento

Utilice parámetros para la entrada y declaraciones de retorno para la salida.

Esto puede hacer que la función sea independiente de elementos externos a ella. Los parámetros y las declaraciones de retorno son la mejor manera de aislar las dependencias externas.

Utilice las variables globales con precaución

Primera consideración: las variables globales suelen ser una forma deficiente de comunicarse entre funciones.

Causará problemas de dependencia y sincronización, lo que dificultará la depuración y modificación del programa.

La segunda consideración: desde la perspectiva del código y la optimización del rendimiento, las variables locales son mucho más rápidas que las variables globales.

Según el orden de búsqueda de variables de Python: Variables de función local==》Variables de función de nivel superior==》Variables globales==》Variables integradas

Como puede ser Como se ve en lo anterior, primero se buscan las variables locales y, una vez encontradas, se detiene.

Se prueba específicamente a continuación y los resultados de la prueba son los siguientes:

importar perfil

A = 5

def param_test():

B = 5

res = 0

para i en el rango (100000000):

res = B i

devolver res

p>

if __name__=='__main__':

perfil.run('param_test()')

gt;gt;gt; === ==== ============================== REINICIAR =============== ==== ==================

gt;gt;gt;

5 llamadas a funciones en 37.012 segundos #Global resultados de prueba variables: 37 segundos

Ordenado por: nombre estándar

ncalls tottime percall cumtime percall nombre de archivo: lineno(función)

1 19.586 19.586 19.586 19.586 : 0 (rango)

1 1.358 1.358 1.358 1.358: 0(setprofile)

1 0.004 0.004 35.448 35.448: 1()

1 15.857 15.857 35.443 35.443 Aprender. py: 5( param_test)

1 0.206 0.206 37.012 37.012 perfil: 0 (param_test())

0 0.000 0.000 perfil: 0 (perfilador)

gt ;gt;gt ; ===================================== REINICIAR ======= ==== ==========================

gt;gt;gt; 5 llamadas a funciones en 11,504 segundos #Resultado de la prueba de variable local: 11 segundos

Ordenado por: nombre estándar

ncalls tottime percall cumtime percall nombre de archivo: lineno(función)

1 3,135 3,135 3,135 3,135 :0(rango)

1 0,006 0,006 0,006 0,006 :0(setprofile)

1 0,000 0,000 11,497 11,497 :1()

1 8,362 8,362 11,497 11,497 Learn.py:5(param_test)

1 0,000 0,000 11,504 11,504 perfil:0(param_test())

0 0,000 0,000 perfil

:0 (perfilador)

Evite cambiar los parámetros de tipo de variable

Los tipos de datos de Python, como listas y diccionarios, son objetos mutables. Cuando se pasan como argumentos a funciones, a veces se modifican como variables globales.

La desventaja de esto es que mejora el acoplamiento entre funciones, haciendo que las funciones sean demasiado especiales y poco amigables. También es difícil de mantener.

En este momento, deberías considerar usar el segmento S[:] y las funciones copy() y deepcopy() en el módulo de copia para hacer una copia y evitar modificar el objeto variable.

Específico Consulte este artículo: Explicación detallada de copias profundas y superficiales en Python

Evite cambiar variables directamente en otro módulo

Por ejemplo, importe un módulo en el archivo b.py y hay variables en un PI = 3.14, pero b.py quiere cambiarlo a: PI = 3.14159 Aquí no puedes averiguar cuál es el valor original de la variable PI. Cuando se encuentre con esta situación, puede considerar el uso de nombres de funciones fáciles de entender:

#Module a.py

PI = 3.14

def setPi(new ):

PI = nuevo

devuelve PI

De esta manera tienes el valor de PI que deseas sin cambiar el valor de PI en el módulo a< / p>

importar un

PI = a.setPi(3.14159)

imprimir PI