kon*_*iik 16 python coding-style pep8
场景:由于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
Run Code Online (Sandbox Code Playgroud)单个赋值,在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
Run Code Online (Sandbox Code Playgroud)分成多个分配,每个分配成一行
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]
Run Code Online (Sandbox Code Playgroud)三个选项中哪一个最好?有更好的吗?
要回答"有什么更好的",我建议a 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
Run Code Online (Sandbox Code Playgroud)
这意味着您可以访问属性,而不是单独的名称,但重量轻于构建类,将查询中的所有数据保存在一起,并通过合理的名称公开值.