将函数返回的值分配给Python中的变量

时间:2011-09-07 18:32:57

标签: python

我最近在Python中开始编码,遇到了将函数返回的值赋给变量的问题。

class Combolock:
    def _init_(self,num1,num2,num3):
        self.x = [num1,num2,num3]
    def next(self, state):
        print "Enter combination"
        combo = raw_input(">")
        if combo == self.x[state]:
            print "Correct"
            return 1
        else:
            print "Wrong"
            return 0
    def lock(self):
        currentState = 0
        while currentState < 2:
            temp = next(currentState)
            if temp == 1:
                currentState = currentState + 1
            else:
                currentState = 99
                print "ALARM"

当我调用锁定函数时,我在行

处出错
temp = next(currentState)

说int对象不是迭代器。

4 个答案:

答案 0 :(得分:8)

您应该使用self.next(currentState),因为您希望在类范围内使用next方法。

功能next是全局的,next(obj)仅在objiterator时才有效。
您可能希望查看python文档中的yield statement

答案 1 :(得分:4)

正如Andrea(+1)所指出的,你需要告诉python你想在self对象上调用next()方法,所以你需要调用它self.next(currentState)

另外,请注意,您已定义了不正确的初始值设定项(也称为构造函数)。你必须使用双下划线:

__init__(...

而不是:

_init_(...

否则它只是一种方法 - 在对象创建时不会被调用。

答案 2 :(得分:0)

使用self.next(currentState),否则它指的是迭代器的next()方法,而不是你的类

答案 3 :(得分:0)

错误意味着它所说的内容。当您使用next(iterable)时,next会尝试调用iterable的{​​{1}} 方法。但是,当您执行next

dir(0)

如您所见,整数上没有['__abs__', # ... snip ... '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real'] 方法。

如果您尝试调用自己的next方法,则需要使用next而不是self.nextnext是一个内置函数,它调用迭代器的next方法让你做这样的事情:

next

尝试:

 for something in my_iterator:
     print something