2010-04-08 5 views
1

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

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

Является ли это Pythonian способ идти? Я имею в виду, есть ли хорошо установленные/согласованные стандарты кодирования, чтобы отличать их в python?

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

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

+6

читать PEP 8: http://www.python.org/dev/peps/pep-0008/ –

+1

Что побуждает вас хотеть сделать это? Обычно это достаточно очевидно, когда появляется имя, и это достаточно легко (если вы не делаете что-то безумное), чтобы понять, не прочитав код. –

+1

Если вы хотите запретить функции изменения аргументов, например const, вы можете использовать модуль 'copy' для объектов, которые вы передаете в качестве аргументов, чтобы вы передавали копию вместо фактического объекта. Хотя, это тоже может ввести в заблуждение. Наверное, лучше всего написать код, который делает именно то, что вы хотите, и написать unittests, чтобы это сделать. – 2010-04-08 22:41:51

ответ

2

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

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

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

0

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

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

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

1

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

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

Как утверждают другие, константы должны быть в UPPER_CASE_WITH_UNDERSCORES, который является общим для многих языков.

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

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

Смежные вопросы