Вы можете легко сделать это с помощью zip, сместив элементы на одну запись, чтобы сравнить каждый из них со своим предшественником:
items = (102, 109, 120, 80, 40, 30, 200, 90)
high = 100
bounds = [ num for prev,num in zip((high-1,)+items,items) if (num<high)^(prev<high) ]
result = list(zip(bounds[::2],bounds[1::2]))
print(result) # [(102, 80), (200, 90)]
Я думаю решение, которое Вы описываете, где параметры конструктора тождественно называют, и Вы снабжаете префиксом участников класса this
, очень хорошо. Это ясно, это кратко, и нет никакого беспорядка о том, что Вы имели в виду.
Я просто использую this
подход; затем все мои переменные и поля отражают свое намерение. Не делайте X
вещь - который просто ужасен;-p
Помещение X на Ваших параметрах как этот плохо. Конструктор является частью открытого интерфейса Вашего класса, и это только смутит пользователей Вашего класса. Некоторым нравится снабжать префиксом членские переменные символы нижнего подчеркивания, который намного лучше, поскольку это только видимо конструктору Вашего класса. Иначе использование этого как в Вашем втором примере будет достаточно.
Я случаюсь как это, я не думаю, что любой путь лучше, чем кто-либо другой. Но ради других людей, которые, возможно, должны были бы поддержать Ваш код (и Вы в этом отношении) я скажу просто что выбор один способ сделать его и буду последователен об этом.
Почему не только добавляют подчеркивание или однобуквенный префикс для Ваших переменных члена парламента, не занимающего официального поста. Если Вам не нравится та идея, что Вы сделали в своем втором блоке кода, в порядке.
m_foo
для членов парламента, не занимающих официального поста
Foo
для общественной собственности
foo
для параметров и локальных переменных.
Я предпочитаю отличать область действия блока от расширенных участников объема, вот почему я придерживаюсь префикса.
Необходимо разделить их в некотором роде. Используя 'это'. слабая форма венгерской записи, таким образом, Вы могли бы также стиснуть зубы и использовать символы нижнего подчеркивания или 'm _'.
Я также чувствую 'это'. на самом деле хуже, потому что в крайних случаях (т.е. большие методы) это возможно 'это'. будет брошен и на неправильную переменную сошлются. Я знаю, что большие методы плохи, но они действительно происходят естественно в реальных бизнес-приложениях с разработчиками варьировавшегося навыка. Используя префикс для частных полей предотвратит тот сценарий.
Заманчиво утверждать, что о подчеркивании можно забыть таким же образом как 'это'. был бы. Но это неправильно, потому что подчеркивание меняет имя переменной, таким образом, единственное место, об этом можно было возможно забыть, в определении, не в он - использование в файле. Принимая во внимание, что с 'этим'. префикс там не является никакой ошибкой компилятора, если Вы забываете это во время использования.
Независимо от того, что Вы выбираете, нет никакого венгра предотвращения в этой ситуации, используете ли Вы 'это'. или подчеркивание. Это не настолько плохо так или иначе, мы вынуждены условно использовать венгерский язык для имен интерфейса, имен элементов управления и вероятно других мест, о которых я не могу думать прямо сейчас.
Префикс элементы и параметры с « m_
» и « p_
] "или" s_
", если член статический.
Не украшайте properties или locals , и когда вы чувствуете, что должны назвать их то же самое (без учета регистра), разрешите конфликт, добавив к свойствам префикс "this.".
Учтите, что существует как минимум ЧЕТЫРЕ (4) различные категории читаемых / назначаемых имен, которые необходимо различать: Локальные переменные , Переменные-члены (экземплярные и статические), Свойства и параметры метода . Все четыре категории могут отображаться в одном блоке кода, и поэтому каждая из них нуждается в четких отличительных характеристиках.
Значимый префикс может одновременно различать переменные и , раскрывать их область действия, например, m_ (член), s_ (статический), p_ (параметр), оставляя общедоступные свойства и локальные переменные оставались простыми без префиксов и без заботы о чувствительности к регистру. Если по какой-то причине вы должны назвать локальную переменную так же, как свойство без учета регистра, просто добавьте к этому свойству префикс «this».
Конфликты именования между локальными переменными и параметрами ] не встречаются, потому что они не могут иметь одно и то же имя (компилятор поймает повторяющееся определение). То же самое касается переменных-членов и свойств . Параметры и члены с префиксом «p_» и «m_» соответственно, не будут конфликтовать, а конфликты между локальными переменными без префикса и свойствами можно разрешить, добавив "this". к свойствам.
Альтернативы моим предложениям не очень хороши: используйте чувствительность к регистру (плохая идея, поскольку не все языки CLR чувствительны к регистру), используйте символы подчеркивания сами по себе (также плохо, поскольку это может противоречить стандартам и не соответствует я вам ни черта не скажу) или используйте разные имена (это может занять много времени, сложно и может показаться произвольным).