Аргументы, локальные переменные и соглашение о кодировании глобальных переменных в Python - PullRequest
4 голосов
/ 08 апреля 2010

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

  • Глобальные переменные начинаются с _ и заглавной буквы
  • аргументы заканчиваются на _
_Gvariable = 10
def hello(x_, y_):
   z = x_ + y_

Это питонский путь? Я имею в виду, существуют ли общепринятые / согласованные стандарты кодирования для дифференциации их в python?

=== ДОБАВЛЕНО ===

Я просто хочу провести различие между аргументами и локальными переменными. Поскольку аргументы приводятся извне, они больше похожи на ПЗУ в том смысле, что они не предназначены только для чтения. C ++ предоставляет ключевое слово const, чтобы предотвратить изменение аргументов, но не для python. Я думал, что добавление _ может быть одним из способов имитировать эту функцию в Python.

Ответы [ 3 ]

4 голосов
/ 08 апреля 2010

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

http://www.python.org/dev/peps/pep-0008/

Почему необходимо различать аргументы и локальные переменные, поскольку один является просто подмножеством другого. Вы можете использовать locals(), globals() и vars() для просмотра области действия, если у вас возникли локальные проблемы Модуль inspect также может помочь с этим. И, если возможно, избегайте использования глобальных переменных в максимально возможной степени.

2 голосов
/ 08 апреля 2010

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

Аргументы должны быть очевидны, потому что они есть в объявлении функции.

Как говорили другие, константы должны быть в UPPER_CASE_WITH_UNDERSCORES, что является соглашением, используемым многими языками.

Если вы обнаружите, что у вас возникают проблемы с отслеживанием глобальных, локальных переменных и переменных параметров, я полагаю, что проблема может заключаться в том, что ваши функции слишком длинные и выполняют слишком много. Функции и методы должны быть короткими и делать только одно. Я начинаю испытывать зуд рефакторинга, если мои функции превышают 10-20 строк кода.

Я рекомендую прочитать книгу «Чистый код» Роберта Мартина. Примеры приведены на Java, но принципы применимы ко всем языкам.

0 голосов
/ 08 апреля 2010

Абсолютно ужасно. Нет никакой причины использовать специальную схему именования для глобальных и локальных объектов. Также вам следует избегать использования глобальных объектов, если они не являются функциями, классами или константами.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...