Неэффективен ли доступ к контейнеру члена класса Python в операторе цикла? - PullRequest
1 голос
/ 20 марта 2010

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

Мой вопрос касается самого оператора цикла ... если у меня есть следующий класс:

class A(object):
   def __init__(self)
       self.myList = [ 'a','b','c', 'd', 'e' ]

Имеет ли следующий код в функции-члене поиск в словаре по одному или по одной на цикл-итерацию (5)? ​​

for letter in self.myList:
     print letter

IE, я должен принять следующий шаблон, если я обеспокоен эффективностью ...

localList = self.myList
for letter in localList:
    print letter

или это действительно МЕНЬШЕ эффективно из-за присваивания локальной переменной?

Обратите внимание, я знаю, что ранняя оптимизация - опасная ловушка, если я беспокоюсь об общей эффективности разработки кода. Здесь я специально спрашиваю об эффективности кода, а не о кодировании.

1 Ответ

6 голосов
/ 20 марта 2010

Итератор создается из self.myList, и этот итератор используется. Никаких других дополнительных поисков для итерации на self не производится.

...