场景:由于SQL查询,您有一个长元组,并希望将其解压缩为单个值。符合PEP8的最佳方法是什么?到目前为止,我有以下三种选择:
单个赋值,使用反斜杠分割为多行
person_id, first_name, last_name, email, \
birth_date, graduation_year, home_street, \
home_city, home_zip, mail_street, mail_city, \
mail_zip = row
单个作业,在parantheses中分组左侧并且没有反斜杠的断行
(person_id, first_name, last_name, email,
birth_date, graduation_year, home_street,
home_city, home_zip, mail_street, mail_city,
mail_zip) = row
分成多个作业,每个作业合为一行
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]
三个选项中哪一个最好?还有什么更好的吗?
答案 0 :(得分:18)
解答您的问题"三个选项中哪一个最好?"
pep8州:
包装长行的首选方法是在括号,括号和括号内使用Python隐含的行继续。通过在括号中包装表达式,可以在多行中分割长行。这些应该优先使用反斜杠进行续行。
这意味着第二个优于第一个。第三个也很好地符合pep8,但个人不会推荐它。
答案 1 :(得分:7)
要回答"还有什么更好的" ,我建议namedtuple
允许您轻松访问各个数据项:
>>> 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
这意味着您可以访问属性,而不是单独的名称,但重量轻于构建类,将查询中的所有数据保存在一起,并通过合理的名称公开值。