¿Es esto inconsistente con la recomendación de espacios alrededor de cualquier otra aparición de =
en el código Python?
Como es:
func(1, 2, very_long_variable_name=another_very_long_variable_name)
mejor que:
func(1, 2, very_long_variable_name = another_very_long_variable_name)
Se agradecerá cualquier enlace a la discusión / explicación del BDFL de Python .
Tenga en cuenta que esta pregunta se trata más de kwargs que de valores predeterminados, acabo de usar la fraseología de PEP 8.
No estoy solicitando opiniones. Estoy preguntando las razones detrás de esta decisión. Es más como preguntar por qué lo usaría {
en la misma línea que una if
declaración en un programa C, no si debería usarlo o no.
fuente
{
una nueva línea despuésif
(guarda el mismo número de caracteres) pero no en la definición de clase. Además, un parámetro de palabra clave es diferente al valor predeterminado, pero sigue utilizando la misma recomendación de estilo.kw1 = kw1, kw2 = kw2
;) pero tal vez eso fue lo que pensaron Guido y Barry.No usaría very_long_variable_name como argumento predeterminado. Así que considera esto:
Más allá de esto:
Además, no tiene mucho sentido utilizar variables como valores predeterminados. Quizás algunas variables constantes (que en realidad no son constantes) y, en ese caso, usaría nombres en mayúsculas, descriptivos pero lo más cortos posible. Así que no otro_muy_...
fuente
Hay pros y contras.
Me disgusta mucho cómo se lee el código compatible con PEP8. No creo en el argumento que
very_long_variable_name=another_very_long_variable_name
jamás puede ser más legible por humanos quevery_long_variable_name = another_very_long_variable_name
. No es así como lee la gente. Es una carga cognitiva adicional, particularmente en ausencia de resaltado de sintaxis.Sin embargo, hay un beneficio significativo. Si se cumplen las reglas de espaciado, la búsqueda de parámetros utilizando exclusivamente herramientas es mucho más efectiva.
fuente
En mi opinión, omitir los espacios para los argumentos proporciona una agrupación visual más limpia de los pares arg / valor; parece menos desordenado.
fuente
arg1=40
es más legible ya que la relación es más obvia.Creo que hay varias razones para esto, aunque podría estar racionalizando:
a == b
que también pueden ser expresiones válidas dentro de una llamada.fuente
Para mí, hace que el código sea más legible y, por lo tanto, es una buena convención.
Creo que la diferencia clave en términos de estilo entre las asignaciones de variables y las asignaciones de palabras clave de función es que solo debería haber una única
=
en una línea para las primeras, mientras que generalmente hay múltiples=
s en una línea para las últimas.Si no hubiera otras consideraciones, preferiríamos
foo = 42
hacerlofoo=42
, porque el segundo no es el formato típico de los signos iguales y porque el primero separa visualmente la variable y el valor con espacios en blanco.Pero cuando hay varias asignaciones en una línea, preferimos
f(foo=42, bar=43, baz=44)
hacerlof(foo = 42, bar = 43, baz = 44)
, porque la primera separa visualmente las diversas asignaciones con espacios en blanco, mientras que la segunda no lo hace, lo que hace que sea un poco más difícil ver dónde están los pares de palabra clave / valor.Aquí hay otra manera de decirlo: no es una consistencia detrás de la convención. Esa consistencia es la siguiente: el "nivel más alto de separación" se hace visualmente más claro a través de los espacios. Los niveles inferiores de separación no lo son (porque se confundiría con el espacio en blanco que separa el nivel superior). Para la asignación de variables, el nivel más alto de separación es entre variable y valor. Para la asignación de palabras clave de función, el nivel más alto de separación es entre las asignaciones individuales en sí.
fuente