Idioma para desempaquetar tupla larga

Escenario: tiene una tupla larga como resultado de una consulta SQL y desea descomprimirla en valores individuales. ¿Cuál es la mejor manera de hacerlo mientras se ajusta a PEP8? Hasta ahora tengo estas tres opciones:

  1. asignación única, use la barra invertida para dividir en varias líneas

    person_id, first_name, last_name, email, \ birth_date, graduation_year, home_street, \ home_city, home_zip, mail_street, mail_city, \ mail_zip = row 
  2. Asignación única, grupo a la izquierda en paréntesis y líneas de quiebre sin barra invertida

     (person_id, first_name, last_name, email, birth_date, graduation_year, home_street, home_city, home_zip, mail_street, mail_city, mail_zip) = row 
  3. dividido en múltiples asignaciones, cada una encaja en una sola línea

     person_id, first_name, last_name, email = row[0:4] birth_date, graduation_year, home_street = row[4:7] home_city, home_zip, mail_street, mail_city = row[7:11] mail_zip = row[11] 

¿Cuál de las tres opciones es la mejor? ¿Hay algo mejor?

Respondiendo a su pregunta “¿Cuál de las tres opciones es la mejor?”

pep8 estados:

La forma preferida de ajustar líneas largas es mediante el uso de la continuación de la línea implícita de Python entre paréntesis, corchetes y llaves. Las líneas largas se pueden dividir en varias líneas envolviendo expresiones entre paréntesis. Estos se deben usar en lugar de usar una barra invertida para la continuación de la línea.

Esto significa que el segundo es preferido sobre el primero. El tercero también está bien, pero personalmente no lo recomendaría.

Para responder “hay algo mejor” , sugeriría que un grupo con namedtuple permita acceder a los elementos de datos individuales con un mínimo de esfuerzo:

 >>> from collections import namedtuple >>> Person = namedtuple("Person", ['person_id', 'first_name', 'last_name', 'email', 'birth_date', 'graduation_year', 'home_street', 'home_city', 'home_zip', 'mail_street', 'mail_city', 'mail_zip']) >>> row = range(12) # dummy data >>> p = Person(*row) # unpack tuple into namedtuple >>> p Person(person_id=0, first_name=1, last_name=2, email=3, birth_date=4, graduation_year=5, home_street=6, home_city=7, home_zip=8, mail_street=9, mail_city=10, mail_zip=11) >>> p.birth_date 4 

Esto significa que tiene acceso a atributos, en lugar de nombres separados, pero es más liviano que construir una clase, mantiene todos los datos de su consulta juntos y expone los valores a través de nombres sensibles.