Я работал с функциями генератора и частными функциями класса. Я задаюсьМогу ли я быть предупрежден, когда случайно использовал функцию генератора
- Почему когда получают (в моем одном случае был случайно) в __someFunc, что эта функция просто кажется, не будет вызываться из __someGenerator. Также, какую терминологию я хочу использовать, ссылаясь на эти аспекты языка?
- Может ли интерпретатор python предупреждать о таких случаях?
Ниже приведен пример фрагмента моего сценария.
class someClass():
def __init__(self):
pass
#Copy and paste mistake where yield ended up in a regular function
def __someFunc(self):
print "hello"
#yield True #if yielding in this function it isn't called
def __someGenerator (self):
for i in range(0, 10):
self.__someFunc()
yield True
yield False
def someMethod(self):
func = self.__someGenerator()
while func.next():
print "next"
sc = someClass()
sc.someMethod()
Я был сожжен на этом и потратил некоторое время, пытаясь понять, почему функция просто не вызвана. Я, наконец, обнаружил, что уступаю в функции, в которой я не хотел.
Предложение Orthogonal Python: лидирующие двойные подчеркивания не нужны, просто используйте один ведущий символ подчеркивания, а кодировщики Python признают, что он не является частью интерфейса по конфиденциальности джентльмена. – cdleary
Как вы НЕ знали, что у вас есть заявление о доходности? Кто-то еще отредактировал ваш код, и вы сделали SVN и были удивлены обновлением? Какой сценарий привел к тому, что функция была генератором вместо обычного метода. –
@ S.Lott: Скопировать/вставить, как упоминает его комментарий. Я всегда находил копии/пасты кода, чтобы вызвать больше головных болей, чем они решают, но я знаю, что многие люди считают их полезными. –