我偶然使用发电机功能时可以收到警告

2 python language-features function generator

我正在使用生成器函数和类的私有函数.我想知道

  1. 为什么在__someFunc中屈服(在我的一个案例中是偶然的),这个函数似乎不会从__someGenerator中调用.在提到语言的这些方面时,我想要使用的术语是什么?
  2. 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()
Run Code Online (Sandbox Code Playgroud)

我被烧了,花了一些时间试图弄清楚为什么函数没有被调用.我终于发现我正在屈服于我不想进入的功能.

Chr*_*her 6

"生成器"不是语言特征,而是"产生"功能的名称.屈服几乎总是合法的.对于Python来说,没有任何方法可以知道你并不是"意味着"从某个函数中获得收益.

本PEP http://www.python.org/dev/peps/pep-0255/讨论了生成器,可以帮助您更好地理解背景.

我同情你的经验,但编制者无法弄清楚你"为他们做什么",只是你实际告诉他们要做的事情.