Возможно ли разбить длинную линию на несколько строк вдоль границ вызова метода? [Дубликат]

/**
 * A navigation component
 */
import React, { Component } from 'react'
import { Link, IndexLink, withRouter } from 'react-router'

import styles from './styles.scss'

class NavItem extends Component {
  render () {
    const { router } = this.props
    const { index, to, children, ...props } = this.props

    let isActive
    if( router.isActive('/',true) && index ) isActive = true
    else  isActive = router.isActive(to)
    const LinkComponent = index ?  IndexLink : Link

    return (
      <li className={isActive ? 'active' : ''}>
        <LinkComponent to={to} {...props}>{children}</LinkComponent>
      </li>
    )
  }
}

NavItem = withRouter(NavItem)

export default NavItem

Использование:

<ul className="nav nav-tabs"> 
  <NavItem to='/home' index={true} >Home</NavItem>
  <NavItem to='/about'>About</NavItem>
</ul>
95
задан Juliusz Gonera 22 January 2011 в 17:14
поделиться

8 ответов

Вы можете использовать дополнительную скобку:

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()
    )
195
ответ дан sth 19 August 2018 в 19:46
поделиться
  • 1
    Мне также нравится это лучше всего. Не добавляет больше кода, и он без обратных косых черт. – Juliusz Gonera 23 January 2011 в 00:17
  • 2
    Не уверен, что оправдывает здесь дополнительный отступ; Я думаю, что это решение гласит так же, как и с подвесными линиями, отступом только один раз, а конечный паз совсем нет. – Carl Meyer 23 June 2015 в 21:57
  • 3
    На мой взгляд, двойной отступ полезен здесь, потому что он визуально отличается от нормального отступающего блока. Когда он окружен другим кодом, это делает более очевидным, что это обернутая одна строка. – sth 21 October 2016 в 19:57
  • 4
    Лучший ответ с точки зрения использования parens. Как упоминалось в комментарии Shanimal в другом ответе, использование предполагаемого продолжения строки через скобки на самом деле PEP 8 предпочтительнее против символа продолжения `` – kevlarr 12 October 2017 в 15:49
  • 5
    Я предпочитаю обратную косую черту. Скобка не является намеком на всю ситуацию. Например, он не работает с оператором присваивания. Представьте, что вы хотите разбить линии в этой цепочке: foo.set_default('bar', {}).set_default('spam', {}).set_default('eggs', {})['lol'] = 'yeah' – loutre 9 July 2018 в 14:20

Это немного другое решение, чем другие, но мой любимый, поскольку он иногда приводит к отличному метапрограммированию.

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()

Это хороший метод для поиска. Пройдите список условных выражений из моей сложной формы запроса (или строковых отчислений о том, что ищет пользователь), а затем просто взорвите словарь в фильтр.

4
ответ дан Árni St. Sigurðsson 19 August 2018 в 19:46
поделиться

Мне нравится отступать аргументы двумя блоками, а оператор одним блоком:

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)
1
ответ дан acgtyrant 19 August 2018 в 19:46
поделиться

Согласно Справочник по языку Python Вы можете использовать обратную косую черту. Или просто сломайте его. Если скобка не сопряжена, python не будет рассматривать это как строку. И при таких обстоятельствах отступы следующих строк не имеют значения.

4
ответ дан Haozhun 19 August 2018 в 19:46
поделиться

Просто сохраните промежуточный результат / объект и вызовите на нем следующий метод, например

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()
9
ответ дан Ivo van der Wijk 19 August 2018 в 19:46
поделиться
  • 1
    Это хорошо работает для чего-то вроде запроса, но, как общий шаблон, я не уверен. Например, при цепочке в Beautiful Soup, например team_members = soup.find(class_='section team').find_all('ul').find_all('li'), возвращаемое значение из каждого вызова .find(...) еще не соответствует значению team_members. – Taylor Edmiston 20 October 2016 в 19:52

Кажется, вы используете SQLAlchemy, если это правда, метод 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()
1
ответ дан minhee 19 August 2018 в 19:46
поделиться
  • 1
    +1 для подсказки фильтра SQLAlchemy filter_by (). Это хорошо для этого примера, но я часто использую filter () вместо этого, который принимает только 1 условие. – Juliusz Gonera 23 January 2011 в 00:18

Мой личный выбор:

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()
11
ответ дан pkoch 19 August 2018 в 19:46
поделиться
  • 1
    Я согласен, если есть несколько параметров, которые передаются, но они выглядят уродливо, когда 0 или 1 параметры являются общими. Например: gist.github.com/andybak/b23b6ad9a68c7e1b794d – Andy Baker 5 July 2015 в 11:50
  • 2
    Да, этот стиль имеет вырожденные случаи (например, любой стиль). Я бы не сломал все открытые параны. Ничто из этого не оставляет меня счастливым, но вот некоторые случаи: gist.github.com/pkoch/8098c76614765750f769 – pkoch 30 July 2015 в 20:57

Это случай, когда символ продолжения строки является предпочтительным для открытия круглых скобок. Потребность в этом стиле становится более очевидной, поскольку имена методов становятся длиннее, а методы начинают принимать аргументы:

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, это может быть признаком того, что есть проблемы с читабельностью, которые превосходят ваш выбор пробелов: -)

40
ответ дан Raymond Hettinger 19 August 2018 в 19:46
поделиться
  • 1
    +1 на обратную косую черту и выравнивание прикованных фильтров в этом конкретном случае. Эта ситуация возникает и в Django, и она наиболее читаема таким образом, но в любой другой ситуации я чувствую, что заключенные в скобки фразы превосходят (не страдают от «есть ли пробелы после моей обратной косой черты? & quot; проблема). Тем не менее, в скобках фраза может быть использована для достижения того же эффекта, но она помещает вас в режим чтения Лиспа в середине чтения Python, который я нахожу в ярости. – zxq9 31 May 2013 в 02:02
  • 2
    Я не вижу, как это решение лучше справляется », поскольку имена методов становятся длиннее, а методы начинают принимать аргументы & quot; чем либо «обертка во внешних парадах», или "прерывание линии после каждого открытого парагона и перед каждым близким участком" решения. На самом деле это хуже при обработке, так как (по крайней мере, как показано здесь) для каждой подвесной линии требуется гораздо более глубокий отступ. – Carl Meyer 23 June 2015 в 21:57
  • 3
    Слишком большой отступ для вызовов фильтра. Здесь было бы достаточно одной закладки или 4 пробела. Также выравнивание `` ... Сколько секунд вы удерживали клавишу пробела? Вообще я против всех путей, которые требуют, чтобы вы забивали этот космический ключ, как будто завтра нет. – Zelphir 25 November 2016 в 17:05
  • 4
    fwiw, PEP8 читает «Предпочтительный способ обертывания длинных строк заключается в использовании продолжения строки подразумеваемых строк Python в круглых скобках, скобках и фигурных скобках. Длинные строки могут быть разбиты на несколько строк, обертывая выражения в круглых скобках. Они должны использоваться вместо использования обратного слэша для продолжения строки. & Quot; - Python.org Далее обсуждается, когда обратная косая черта может быть уместной – Shanimal 10 August 2017 в 18:28
  • 5
    Отличная ссылка на PEP8! Досадная проблема при выравнивании всех вызовов .filter заключается в том, что если вы измените subkeyword на sub_keyword, теперь вам нужно исправить отступ каждой отдельной строки только потому, что вы изменили имя переменной , Не хорошо, когда стиль на самом деле препятствует ремонтопригодности ... – kevlarr 12 October 2017 в 15:45
Другие вопросы по тегам:

Похожие вопросы: