Python: при передаче переменных между методами необходимо ли присваивать ему новое имя? - PullRequest
2 голосов
/ 22 мая 2010

Я думаю, что ответ, вероятно, «нет», если программа небольшая и существует много методов, но как насчет более крупной программы? Если я собираюсь использовать одну переменную в нескольких методах по всей программе, разумнее ли:

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

Это более стилистический вопрос, чем все остальное. Какое соглашение об именах ВЫ используете при передаче переменных?

Ответы [ 6 ]

4 голосов
/ 22 мая 2010

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

def printIt(num):
    print(num)

def f():
    num = 2
    printIt(num)
3 голосов
/ 22 мая 2010

Я склонен многократно использовать имена переменных в локальных функциях, если они находятся в середине процесса.Обычно «результат» для поиска в БД или вычисления, который используется посредником и необходим для генерации или построения конечного результата метода.

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

2 голосов
/ 22 мая 2010

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

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

Существует большая (и не совсем последовательная) литература по именованию вещей. Несколько вещей для рассмотрения:

  1. Имена с небольшими областями действия могут быть короткими именами, которые не обязательно рассказывают всю историю о переменной, поскольку весь контекст для переменной легко виден. i, j, k как счетчики в циклах - это, пожалуй, классический пример - но вы не видите так много в Python с его денди для элемента в конструкции цикла коллекции.
  2. Обратная сторона этого заключается в том, что имена с большими областями действия (возможно, переменные экземпляра в классе) должны иметь более полные описательные имена, поскольку они появляются в местах, где контекст инициализации / модификации не виден.
  3. Старайтесь не помещать кусочки «шума» в свои имена. Частота_инфо --- что именно добавляет информационная часть к вещам?
  4. Не включайте в структуру тип структуры данных - диктат в urldict вам мало чем поможет.
  5. Используйте имена из домена, в котором вы работаете, когда можете, но не форсируйте его.
  6. Стиль Python склоняется к кратким именам. Тщательное размышление и выбор часто приводят к короткому, но подходящему имени.
1 голос
/ 22 мая 2010

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

1 голос
/ 22 мая 2010

Вы должны использовать то же имя, когда оно означает то же самое. Например, если у вас есть база данных «cars», вы можете использовать имя «car» для ссылки на один автомобиль в каждом методе или функции, который принимает автомобиль в качестве аргумента или работает с объектами car внутри. Делая это, кто-то, читающий код, начнет говорить себе «хорошо, это машина», а не «хммм, мне интересно, что это за« foo »...».

Итак, будьте последовательны в использовании имен переменных, а это значит, что вы можете использовать одно и то же имя много раз, если оно имеет одинаковое значение. Если это вообще возможно, никогда не используйте одно и то же имя для обозначения двух разных вещей. Например, не используйте «элемент» для обозначения автомобиля в одном контексте и случайного элемента из списка в другом.

1 голос
/ 22 мая 2010

Не придумывайте способы указать, к какому методу относится имя. Если вы кодируете правильно, вы не будете обрабатывать переменные других методов как локальные. Если у вас есть метод hanle on foobar и вы хотите его значение foo, используйте foobar.foo.

Имена переменных должны указывать содержимое переменной и помогать в понимании кода. Обращение к foo по множеству разных имен, потому что многие методы используют foos, не поможет. Ваше время может быть лучше потрачено на выяснение случаев, когда foo здесь не foo там. В этих случаях вам, вероятно, необходимо использовать другую терминологию как минимум в одном случае. Документируйте дело в своем коде.

Использование того же имени для переменной поможет отследить, где вы используете ключевые объекты в вашем коде. У вас также будет много общих переменных, которые облегчают понимание кода: i, j и k для интеграторов; результат за результатом для промежуточных результатов; и т.д.

...