问题:如何在Python中打破一系列链接方法?
我有以下代码行(不要怪罪命名约定,它们不是我的):
subkeyword = Session.query(
Subkeyword.subkeyword_id, Subkeyword.subkeyword_word
).filter_by(
subkeyword_company_id=self.e_company_id
).filter_by(
subkeyword_word=subkeyword_word
).filter_by(
subkeyword_active=True
).one()
我不喜欢它的外观(不太可读),但是在这种情况下,我没有更好的主意将行数限制为79个字符。有没有更好的方法来破解它(最好没有反斜杠)?
回答 0
您可以使用其他括号:
subkeyword = (
Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
.filter_by(subkeyword_company_id=self.e_company_id)
.filter_by(subkeyword_word=subkeyword_word)
.filter_by(subkeyword_active=True)
.one()
)
回答 1
在这种情况下,最好使用连续行字符代替括号。随着方法名称变长以及方法开始采用参数,对这种样式的需求变得更加明显:
subkeyword = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word) \
.filter_by(subkeyword_company_id=self.e_company_id) \
.filter_by(subkeyword_word=subkeyword_word) \
.filter_by(subkeyword_active=True) \
.one()
PEP 8旨在以一种常识的方式进行解释,并兼顾实用性和美观性。很高兴违反任何导致难看或难以阅读代码的PEP 8准则。
话虽如此,如果您经常发现自己与PEP 8不符,则可能表明存在一些可读性问题超出了对空白的选择:-)
回答 2
我个人的选择是:
子关键字= Session.query( Subkeyword.subkeyword_id, Subkeyword.subkeyword_word, )。过滤( subkeyword_company_id = self.e_company_id, subkeyword_word = subkeyword_word, subkeyword_active =真实, )。之一()
回答 3
只需存储中间结果/对象并在其上调用下一个方法,例如
q = Session.query(Subkeyword.subkeyword_id, Subkeyword.subkeyword_word)
q = q.filter_by(subkeyword_company_id=self.e_company_id)
q = q.filter_by(subkeyword_word=subkeyword_word)
q = q.filter_by(subkeyword_active=True)
subkeyword = q.one()
回答 4
根据Python语言参考,
您可以使用反斜杠。
或简单地打破它。如果括号未配对,则python不会将其视为一行。在这种情况下,以下行的缩进无关紧要。
回答 5
它与其他人提供的解决方案有些不同,但我的最爱,因为它有时会导致漂亮的元编程。
base = [Subkeyword.subkeyword_id, Subkeyword_word]
search = {
'subkeyword_company_id':self.e_company_id,
'subkeyword_word':subkeyword_word,
'subkeyword_active':True,
}
subkeyword = Session.query(*base).filter_by(**search).one()
这是构建搜索的好方法。浏览条件列表,从复杂的查询表单(或基于字符串的有关用户正在寻找的内容的推论)中进行挖掘,然后将字典分解到过滤器中。
回答 6
您似乎在使用SQLAlchemy,如果为true,则sqlalchemy.orm.query.Query.filter_by()
方法采用多个关键字参数,因此您可以这样编写:
subkeyword = Session.query(Subkeyword.subkeyword_id,
Subkeyword.subkeyword_word) \
.filter_by(subkeyword_company_id=self.e_company_id,
subkeyword_word=subkeyword_word,
subkeyword_active=True) \
.one()
但这会更好:
subkeyword = Session.query(Subkeyword.subkeyword_id,
Subkeyword.subkeyword_word)
subkeyword = subkeyword.filter_by(subkeyword_company_id=self.e_company_id,
subkeyword_word=subkeyword_word,
subkeyword_active=True)
subkeuword = subkeyword.one()
回答 7
我喜欢将参数缩进两个块,将语句缩进一个块,如下所示:
for image_pathname in image_directory.iterdir():
image = cv2.imread(str(image_pathname))
input_image = np.resize(
image, (height, width, 3)
).transpose((2,0,1)).reshape(1, 3, height, width)
net.forward_all(data=input_image)
segmentation_index = net.blobs[
'argmax'
].data.squeeze().transpose(1,2,0).astype(np.uint8)
segmentation = np.empty(segmentation_index.shape, dtype=np.uint8)
cv2.LUT(segmentation_index, label_colours, segmentation)
prediction_pathname = prediction_directory / image_pathname.name
cv2.imwrite(str(prediction_pathname), segmentation)