Tengo curiosidad por qué en Python una coma final en una lista es una sintaxis válida, y parece que Python simplemente lo ignora:
>>> ['a','b',]
['a', 'b']
Tiene sentido cuando es una tupla desde entonces ('a')
y ('a',)
son dos cosas diferentes, pero ¿en listas?
Respuestas:
Las principales ventajas son que hace que las listas de varias líneas sean más fáciles de editar y que reduce el desorden en las diferencias.
Cambiando:
a:
implica solo un cambio de una línea en el diff:
Esto supera la diferencia de varias líneas más confusa cuando se omite la coma final:
La última diferencia hace que sea más difícil ver que solo se agregó una línea y que la otra línea no cambió el contenido.
También reduce el riesgo de hacer esto:
y desencadenando una concatenación literal de cadena implícita , produciendo en
s = ['manny', 'mo', 'jackroger']
lugar del resultado deseado.fuente
List = "[" {Item ","} "]".
vs.List = "[" ({Item","}Item|)"]".
"\"item\","
para cada elemento que imprimir"\"item\""
para cada elemento seguido","
de todos menos el último elemento.Es una convención sintáctica común permitir las comas finales en una matriz, los lenguajes como C y Java lo permiten, y Python parece haber adoptado esta convención para su estructura de datos de lista. Es particularmente útil cuando se genera código para llenar una lista: solo genera una secuencia de elementos y comas, no es necesario considerar el último como un caso especial que no debería tener una coma al final.
fuente
Ayuda a eliminar cierto tipo de error. A veces es más claro escribir listas en varias líneas. Pero en el mantenimiento posterior, es posible que desee reorganizar los elementos.
Pero si permite las comas finales y las usa, puede reorganizar fácilmente las líneas sin introducir un error.
fuente
Una tupla es diferente porque
('a')
se expande usando la continuación implícita()
ys como operador de precedencia, mientras que se('a',)
refiere a una tupla de longitud 1.Tu ejemplo original hubiera sido
tuple('a')
fuente
('a'),
es una cadena; pero mi punto era que las comas finales en las tuplas son significativas, pero en las listas todavía no parecen ser aceptadas por Python.tuple('a')
Es probablemente un mal ejemplo, porque en generaltuple(x)
ya(x,)
no son lo mismo.tuple('ab') != ('ab',)
.tuple('a') == ('a',)
solo porque'a'
es una cadena de longitud 1.>>> ("a",) == ("a")
False>>> ("ab",) == ("ab")
Falso>>> ("ab", "bc",) == ("ab", "bc")
VerdaderoLa razón principal es hacer que diff sea menos complicado. Por ejemplo, tienes una lista:
y quieres agregarle otro elemento. Entonces terminarás haciendo esto:
por lo tanto, diff mostrará que se han cambiado dos líneas, primero agregando ',' en línea con 'c' y agregando 'd' en la última línea.
Por lo tanto, python permite el rastreo ',' en el último elemento de la lista, para evitar diferencias adicionales que pueden causar confusión.
fuente