Jak złamać linię metod łańcuchowych w Pythonie?
Mam wiersz poniższego kodu (nie wiń za konwencje nazewnictwa, nie są moje):
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()
Nie podoba mi się, jak to wygląda (niezbyt czytelne), ale nie mam lepszego pomysłu na ograniczenie linii do 79 znaków w tej sytuacji. Czy jest lepszy sposób na złamanie go (najlepiej bez ukośników wstecznych)?
8 answers
Możesz użyć dodatkowego nawiasu:
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()
)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-21 19:58:02
Jest to przypadek, w którym zamiast nawiasów otwartych preferowany jest znak kontynuacji linii. Potrzeba tego stylu staje się bardziej oczywista, gdy nazwy metod stają się dłuższe i gdy metody zaczynają przyjmować argumenty:
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 ma być interpretowany z miarą zdrowego rozsądku i okiem zarówno na to, co praktyczne, jak i piękne. Szczęśliwie naruszają wszelkie wytyczne PEP 8, które skutkują brzydkim lub trudnym do odczytania kodem.
To jest powiedziane, jeśli często znajdziesz się w sprzeczności z PEP 8, może to być znak, że istnieją problemy z czytelnością, które wykraczają poza twój wybór białych znaków: -)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 15:10:46
Mój osobisty wybór to:
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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-22 18:26:12
Wystarczy zapisać pośredni wynik / obiekt i wywołać na nim następną metodę, np.
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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-22 16:19:48
Zgodnie z odniesienie do języka Python
Możesz użyć ukośnika.
Albo po prostu go złamać. Jeśli nawias nie jest sparowany, python nie będzie traktował tego jako linii. I w takich okolicznościach wcięcia następujących linii nie mają znaczenia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-22 16:23:38
Jest to nieco inne rozwiązanie niż oferowane przez innych, ale moje ulubione, ponieważ czasami prowadzi do sprytnego metaprogramowania.
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()
To fajna technika wyszukiwania budynków. Przejrzyj listę warunków, które chcesz wydobyć ze złożonego formularza zapytania( lub opartych na ciągach dedukcji na temat tego, czego szuka użytkownik), a następnie po prostu eksploduj słownik do filtra.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 14:21:25
Wydaje się, że używasz SQLAlchemy, jeśli to prawda, sqlalchemy.orm.query.Query.filter_by()
metoda pobiera wiele argumentów słów kluczowych, więc można napisać w następujący sposób:
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()
Ale byłoby lepiej:
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()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-22 16:30:56
Lubię wciąć argumenty o dwa bloki, a wypowiedź o jeden blok, jak te:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-13 07:40:24