Соглашение о присвоении имен для параметрических усилителей ctors и методов set

Моя стратегия заключалась в том, чтобы найти, где разница в одном ряду с другим. (Учитывая, что «Истины» равны 1, а «Ложь» - 0).

Таким образом, Colm1 - Colm1.shift () представляет значение Delta, где 1 - это сдвиг от False к True, 0 - без изменений, и -1 сдвиг от истинного к ложному.

import pandas as pd

d = {'Col1': [True, True, True, False, False, False, True, True, True, True, False, False, False, True, True, False, False, True, ]}

df = pd.DataFrame(data=d)
df['delta'] = df['Col1'] - df['Col1'].shift()
BooleanShifts = df['delta'].value_counts()
print(BooleanShifts[-1])

После того, как значение подсчитано как число этих [1, 0, -1] значений, вы можете выбрать только -1 и получить количество раз, когда DF смещен к ложному значению. из истинного значения. Я надеюсь, что это помогло ответить на ваш вопрос!

7
задан 3 revs, 3 users 100%Iraimbilanja 26 January 2009 в 16:53
поделиться

12 ответов

Я использую нечто _, это лучше, чем _foo, так как это не будет конфликтовать с реализацией определенные имена функций и ключевые слова.

9
ответ дан 6 December 2019 в 10:54
поделиться

Я иду с

Obj(int foo) : mFoo(foo) { }
void setFoo(int foo) { mFoo = foo; }

в моих программах. Для конструкторов копии и оператора =, я склонен называть его

Obj(Obj const& that):mFoo(that.mFoo) { }

Для операторов я иду с

Obj operator+(Obj const& lhs, Obj const& rhs) { ... }

Поскольку это - левая сторона и правая сторона ее.

6
ответ дан 6 December 2019 в 10:54
поделиться

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

void setFoo(int f) { foo = f; }

Для простого метода set, для одной переменной, это вполне прилично ясно.

Кроме того, я часто делаю это

int setFoo(const int f) { foo = f; }

таким образом, я могу представить вещи в виде строки вместе.

1
ответ дан 6 December 2019 в 10:54
поделиться

Я всегда делаю это:

Obj(int foo) : foo(foo) {}

Я раньше играл в игры с добавлением забавных символов до одного времени, я был поражен этим:

Obj(Bar& b) : b_(b_) {}

Можно ли видеть ошибку? (Да, b_ является ссылочной переменной члена парламента, не занимающего официального поста). Это скомпилировало без предупреждения. Стою мне 3 дней отладки (я был зеленым программистом затем).

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

1
ответ дан 6 December 2019 в 10:54
поделиться

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

Чтение это: Каковы правила об использовании подчеркивания в идентификаторе C++?

Хотя не правило я ограничиваю использование подчеркивания и предпочитаю, чтобы Camel-регистр сделал мои переменные читаемыми. Но это - просто персональное предпочтение, и я не возражаю читать код, который использует его.

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

int X::setWork(int work)
{
    this->work = work;  // OK. But more Java like.

    work = work;        // Compiler won't see that problem.
}

int X::setWork(int newWork)
{
    work = newWork;    // A bit harder to get wrong.
}
1
ответ дан 6 December 2019 в 10:54
поделиться

Я всегда иду для суффикса Param или Arg, но только когда разрешение неоднозначности необходимо.

Obj(int fooArg) : foo(fooArg)
0
ответ дан 6 December 2019 в 10:54
поделиться

Я раньше следовал конвенции Microsoft добавления префикса членских переменных с m_, как m_foo. В моей текущей компании конвенция является запаздывающим подчеркиванием для членских переменных: foo_.

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

0
ответ дан 6 December 2019 в 10:54
поделиться

Номер два имеет проблемы как конвенцию, хотя в Вашем случае это могло быть безопасно. Имя, которому следовал за начальным символом подчеркивания символ верхнего регистра, резервируется для реализации, и все имена с начальными символами подчеркивания резервируются в глобальном контексте. Если у Вас никогда нет участников класса, начинающих с прописных букв (я не делаю), Вы в безопасности с конвенцией как показано (использующий _foo только в качестве аргумента функции), но мне не нравятся соглашения о присвоении имен что юбка в какой-либо степени пределы.

0
ответ дан 6 December 2019 в 10:54
поделиться

Для классов:

Obj(int foo) : _foo(foo) {};

Для структур:

obj_t(int foo_) : foo(foo_) {};

Метод set:

Obj.setFoo(int foo) { _foo = foo; }

Я с litb на использовании lhs и rhs для вызовов оператора.

Я использую camelCase для функций членства класса, и names_with_underscores для полей структуры и методов.

0
ответ дан 6 December 2019 в 10:54
поделиться

Я называю фактические члены с завершающими знаками подчеркивания, поэтому я делаю следующее:

Foo(int bar) : bar_(bar) { }

Причина в том, что я могу использовать функции получения без чего-либо вроде getBar () (bar () лучше).

0
ответ дан 6 December 2019 в 10:54
поделиться

Я делаю это вот так:

obj(int foo) : _foo(foo) { }
int foo() const { return _foo; }
void foo(int value) { _foo = value; }

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

поскольку это несовместимо с соглашениями, используемыми стандартной библиотекой (которая использует foo_bar_baz для всех идентификаторов).

поскольку это несовместимо с соглашениями, используемыми стандартной библиотекой (которая использует foo_bar_baz для всех идентификаторов).

0
ответ дан 6 December 2019 в 10:54
поделиться

Я следую Руководству по стилю Google C ++

Все имена переменных пишутся в нижнем регистре с подчеркиванием между словами. Переменные-члены класса имеют в конце символы подчеркивания. Например: my_exciting_local_variable, my_exciting_member_variable _.

0
ответ дан 6 December 2019 в 10:54
поделиться
Другие вопросы по тегам:

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