Как я могу сделать разрыв строки (продолжение строки) в Python?

Вот плагин jQuery, который я написал, чтобы слить два массива объектов с помощью ключа. Имейте в виду, что это изменяет целевой массив на месте.

(function($) {
  $.extendObjectArray = function(destArray, srcArray, key) {
    for (var index = 0; index < srcArray.length; index++) {
      var srcObject = srcArray[index];
      var existObject = destArray.filter(function(destObj) {
        return destObj[key] === srcObject[key];
      });
      if (existObject.length > 0) {
        var existingIndex = destArray.indexOf(existObject[0]);
        $.extend(true, destArray[existingIndex], srcObject);
      } else {
        destArray.push(srcObject);
      }
    }
    return destArray;
  };
})(jQuery);

var arr1 = [
  { name: "lang",   value: "English" },
  { name: "age",    value: "18"      }
];
var arr2 = [
  { name: "childs", value: '5'       },
  { name: "lang",   value: "German"  }
];
var arr3 = $.extendObjectArray(arr1, arr2, 'name');

console.log(JSON.stringify(arr3, null, 2));
.as-console-wrapper { top: 0; max-height: 100% !important; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


Версия ES6

(function($) {
  $.extendObjectArray = (destArr, srcArr, key) => {
    srcArr.forEach(srcObj => (existObj => {
      if (existObj.length) {
        $.extend(true, destArr[destArr.indexOf(existObj[0])], srcObj);
      } else {
        destArr.push(srcObj);
      }
    })(destArr.filter(v => v[key] === srcObj[key])));
    return destArr;
  };
})(jQuery);
934
задан jww 21 October 2018 в 16:27
поделиться

6 ответов

Какова строка? У Вас могут просто быть аргументы на следующей строке без любых проблем:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
            blahblah6, blahblah7)

Иначе можно сделать что-то вроде этого:

if a == True and \
   b == False

Проверка руководство по стилю для получения дополнительной информации.

От Вашей строки в качестве примера:

a = '1' + '2' + '3' + \
    '4' + '5'

Или:

a = ('1' + '2' + '3' +
    '4' + '5')

Примечание, что в руководстве по стилю говорится, что использование неявного продолжения с круглыми скобками предпочтено, но в данном случае просто добавляющие круглые скобки вокруг Вашего выражения, вероятно, неправильный способ пойти.

1058
ответ дан Michael Anderson 21 October 2018 в 16:27
поделиться

Опасность в использовании обратной косой черты для окончания строки состоит в том, что, если пробел добавляется после обратной косой черты (который, конечно, очень трудно видеть), обратная косая черта больше не делает то, что Вы думали, что это было.

Посмотрите Идиомы Python и Антиидиомы (для Python 2 или Python 3 ) для больше.

65
ответ дан Ted Pudlik 21 October 2018 в 16:27
поделиться

От Руководство по стилю для Кода Python :

предпочтительный способ обернуть длинные линии при помощи подразумеваемого продолжения строки Python в круглых скобках, скобках и фигурных скобках. Длинные линии могут быть повреждены по нескольким строкам путем обертывания выражений в круглых скобках. Они должны использоваться в предпочтении к использованию обратной косой черты для продолжения строки.

Обратные косые черты могут все еще время от времени быть соответствующими. Например, долго, несколько с операторами не могут использовать неявное продолжение, таким образом, обратные косые черты приемлемы:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Другой такой случай с операторами контроля.

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

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

РЕДАКТИРОВАНИЕ: PEP8 теперь рекомендует противоположное соглашение (для повреждения при бинарных операциях) используемый Математиками и их издателями улучшить удобочитаемость.

стиль Donald Knuth повреждения прежде бинарный оператор выравнивает операторы вертикально, таким образом уменьшая рабочую нагрузку глаза при определении, какие объекты добавлены и вычтены.

От PEP8: Должен разрыв строки прежде или после бинарного оператора? :

Donald Knuth объясняет традиционное правило в своей серии Computers и Typesetting: "Хотя формулы в рамках абзаца всегда повреждаются после бинарных операций и отношений, отображенные формулы всегда повреждаются перед бинарными операциями" [3].

Следование традиции от математики обычно приводит к большему количеству читаемого кода:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

В коде Python, допустимо повредиться, прежде или после бинарного оператора, пока соглашение последовательно локально. Для нового кода предлагается стиль Knuth.

[3]: Donald Knuth TeXBook, страницы 195 и 196

199
ответ дан Mathmagician 21 October 2018 в 16:27
поделиться

Можно повредить строки промежуточные круглые скобки и фигурные скобки. Кроме того, можно добавить символ обратной косой черты \ к строке для явного повреждения его:

x = (tuples_first_value,
     second_value)
y = 1 + \
    2
21
ответ дан Konrad Rudolph 21 October 2018 в 16:27
поделиться

Поместите \ в конце Вашей строки или включите оператор в parens ( .. ). От IBM:

b = ((i1 < 20) and
     (i2 < 30) and
     (i3 < 40))

или

b = (i1 < 20) and \
    (i2 < 30) and \
    (i3 < 40)
21
ответ дан SCdF 21 October 2018 в 16:27
поделиться

Из первых уст: Явная строка, присоединяющаяся

, к Двум или больше физическим линиям можно присоединиться в логические строки с помощью символов обратной косой черты (\), следующим образом: когда физическая линия заканчивается в обратной косой черте, которая не является частью строкового литерала или комментария, к этому присоединяются со следующим формированием единственной логической строки, удаляя обратную косую черту и следующий символ конца строки. Например:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

строка А, заканчивающаяся в обратной косой черте, не может нести комментарий. Обратная косая черта не продолжает комментарий. Обратная косая черта не продолжает маркер за исключением строковых литералов (т.е. маркеры кроме строковых литералов не могут быть разделены через физические линии с помощью обратной косой черты). Обратная косая черта недопустима в другом месте на строке вне строкового литерала.

18
ответ дан Jason Navarrete 21 October 2018 в 16:27
поделиться
Другие вопросы по тегам:

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