Нотация Python? - PullRequest
       41

Нотация Python?

3 голосов
/ 22 июля 2009

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

В C ++ я использую измененную версию венгерской нотации, где я не включаю информацию о типе, а только о области видимости переменной (например, lVariable для локальной переменной и mVariable для переменной-члена класса, g для глобальных, s для статических, для входа функции и выхода для выхода функции.)

Я не знаю, есть ли у этого стиля нотации имя, но мне было интересно, стоит ли не использовать такой стиль нотации в Python. Я не очень хорошо знаком с Python, поэтому вы, ребята, можете увидеть проблемы, которые я пока не могу себе представить.

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

Ответы [ 6 ]

8 голосов
/ 22 июля 2009

( Почти каждый программист на Python скажет , что делает код менее читабельным, но я к нему привык, и код, написанный без этих меток, является кодом, который менее читаем для меня)

FTFY.

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

Это также не так необходимо из-за того, как работает сам Python. Например, вам никогда не понадобится ваша форма "mVariable", потому что это очевидно в Python:

class Example(object):
    def__init__(self):
        self.my_member_var = "Hello"

    def sample(self):
        print self.my_member_var

e = Example()
e.sample()
print e.my_member_var

Независимо от того, как вы обращаетесь к переменной-члену (используя self.foo или myinstance.foo), всегда ясно, что это член.

Другие случаи могут быть не такими болезненными, но если ваш код недостаточно прост, чтобы читатель мог помнить, что «переменная names» является параметром », при чтении функции вы, вероятно, делаете что-то не так .

7 голосов
/ 22 июля 2009

Используйте PEP-8. Это почти универсально в мире Python.

4 голосов
/ 22 июля 2009

Я нарушаю PEP8 в моем коде. Я использую:

  • lowercaseCamelCase для методов и функций
  • _prefixedWithUnderscoreLowercaseCamelCase для «приватных» методов
  • underscore_spaced для переменных (любых)
  • _prefixed_with_underscore_variables для "частных" собственных переменных (атрибутов)
  • CapitalizedCamelCase для классов и модулей (хотя я перехожу к нижним модулям)

Мне никогда не нравились венгерские обозначения. Имя переменной должно быть простым и лаконичным, предоставлять достаточную информацию, чтобы было понятно, где (в каком объеме) оно используется и какова его цель, легко читаемо, обеспокоено значением того, к чему оно относится, а не техническим мумбо-юмбо ( например, тип).

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

  • в C ++ и Java традиционно существует CapitalizedCamel для классов и lowercaseCamel для функций-членов.
  • Я работал над кодовой базой, где префикс подчеркивания использовался для обозначения частного, но не такого большого количества частного. Мы не хотели связываться с искажением имени питона (двойное подчеркивание). Это дало нам возможность немного нарушить формальности и посмотреть состояние внутреннего класса во время модульного тестирования.
3 голосов
/ 22 июля 2009

Существует удобный сценарий соответствия pep-8, который вы можете запустить для своего кода:

http://github.com/cburroughs/pep8.py/tree/master

2 голосов
/ 22 июля 2009

Это будет зависеть от проекта и целевой аудитории.

Если вы создаете приложение / плагин / библиотеку с открытым исходным кодом, придерживайтесь рекомендаций PEP.

Если это проект для вашей компании, придерживайтесь соглашений компании или чего-то подобного.

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

Надеюсь, это имеет смысл.

1 голос
/ 22 июля 2009

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

Например, вкладка «4 пробела против 1» имеет большое значение, если у вас есть совместный проект. Люди, отправляющие код в исходное хранилище с вкладками, требуют, чтобы разработчики постоянно спорили о проблемах с пробелами (что в Python - БОЛЬШАЯ сделка).

Python и все языки имеют предпочтительные соглашения. Вы должны выучить их.

Java любит mixedCaseStuff.

C любит szHungarianNotation.

Python предпочитает stuff_with_underscores.

Вы можете написать код Java с_python_type_function_names.
Вы можете написать код Python с помощью javaStyleMixedCaseFunctionNamesThatAreSuppposedToBeReallyExplict

Пока ваш константа: p

...