Tengo una línea del siguiente código (no culpe a las convenciones de nombres, no son mías):
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()
No me gusta cómo se ve (no demasiado legible) pero no tengo una mejor idea para limitar las líneas a 79 caracteres en esta situación. ¿Hay una mejor manera de romperlo (preferiblemente sin barras invertidas)?
python
coding-style
pep8
Juliusz Gonera
fuente
fuente
foo.set_default('bar', {}).set_default('spam', {}).set_default('eggs', {})['lol'] = 'yeah'
Este es un caso en el que se prefiere un carácter de continuación de línea para abrir paréntesis. La necesidad de este estilo se hace más evidente a medida que los nombres de los métodos se alargan y los métodos comienzan a tomar argumentos:
PEP 8 pretende ser interpretado con una medida de sentido común y un ojo para lo práctico y lo bello. Infringe felizmente cualquier directriz PEP 8 que resulte en un código feo o difícil de leer.
Dicho esto, si con frecuencia te encuentras en desacuerdo con PEP 8, puede ser una señal de que hay problemas de legibilidad que trascienden tu elección de espacios en blanco :-)
fuente
.filter
llamadas es que si cambiasubkeyword
asub_keyword
, ahora tiene que corregir la sangría de cada línea solo porque cambió el nombre de la variable. No es un buen estilo, cuando en realidad obstaculiza mantenimiento ...Mi elección personal sería:
fuente
Simplemente almacene el resultado / objeto intermedio e invoque el siguiente método, p. Ej.
fuente
team_members = soup.find(class_='section team').find_all('ul').find_all('li')
, el valor de retorno de cada.find(...)
llamada aún no se ajusta al significado deteam_members
.section = soup.find(class_='section team')
yteam_members = section.find_all('ul').find_all('li')
.De acuerdo con la Referencia del lenguaje Python
Puede usar una barra invertida.
O simplemente romperlo. Si un paréntesis no está emparejado, python no lo tratará como una línea. Y bajo tal circunstancia, la sangría de las siguientes líneas no importa.
fuente
Es una solución un poco diferente a la proporcionada por otros, pero una de mis favoritas, ya que a veces conduce a una ingeniosa metaprogramación.
Esta es una buena técnica para crear búsquedas. Revise una lista de condicionales para extraer de su formulario de consulta complejo (o deducciones basadas en cadenas sobre lo que está buscando el usuario), luego simplemente explote el diccionario en el filtro.
fuente
Parece que usa SQLAlchemy, si es cierto, el
sqlalchemy.orm.query.Query.filter_by()
método toma múltiples argumentos de palabras clave, por lo que podría escribir como:Pero sería mejor:
fuente
Me gusta sangrar los argumentos por dos bloques, y la declaración por un bloque, como estos:
fuente