python中的无限循环

时间:2014-04-01 16:51:59

标签: python

因此,虽然我已经在SO和网络上看到了一些无限循环代码,但我还没有看到一个可以重复调用方法...这里是我的代码..它不起作用,它只是冻结。为什么?

class InfiniteLoop:

    def input():
        print("Hello")
        #num = raw_input("Enter a number: ")
        #print "You entered: ", num

    def loop():
        global input 
        #input = input()
        var = 1
        while var == 1:
            input = input() #

    loop()

任何和所有帮助将不胜感激..谢谢!

编辑:

class Usb_Check:

def cycle(self):
    buzzer_class = Buzzer()
    lock_class = Lock()
    active = False



    device_re = "Bus \d{,3} Device \d{,3}: ID ([a-f0-9]+:[a-f0-9]+)"

    df = subprocess.check_output("lsusb", shell=True)
    for i in df.split('\n'):
        if i:
                if re.findall(device_re, i, re.I)[0] == key:
                buzzer_class.cycle(2)

3 个答案:

答案 0 :(得分:3)

我认为你对这里实际发生的事情感到困惑。

您是否尝试过按输入?我猜你没有,或者你得到TypeError: 'str' object is not callable

很明显,您已经在互联网上看到过几个例子,但您还没有真正理解他们正在做的事情。请允许我发表评论:

课堂宣言对你在这里尝试做的事情并不重要。事实上,在你对函数感觉更舒服之前我可能不会担心使用类,可能还有一个叫做scope的东西。

class InfiniteLoop:

在这里,您没有将self作为第一个参数传递。你几乎总是在Python类中看到这个,因为这真的是使用类方法的全部要点(在类中声明的函数)。

此外,input()已经是Python中函数的名称 - 但它并没有覆盖现有函数,因为它附加到您的类InfiniteLoop。你曾经[1]能够称呼它的唯一方法是通过InfiniteLoop.input()

    def input():
        print("Hello")
        #num = raw_input("Enter a number: ")
        #print "You entered: ", num

global input是我可以告诉你不了解范围的原因。这实际上什么也没做。您希望global的唯一时间是,您实际上是要分配值,并希望这些更改在您的应用程序中可见。看起来你并没有在这里尝试。

    def loop():
        global input 
        #input = input()

您实际上可以更改此片段以阅读while var:,因为1是" True"。或者更好的是,只需使用while True:

        var = 1
        while var == 1:
            input = input() #

当然可以将函数调用放在班级的正文中,但通常你不会看到这一点。主要是因为当发生这种情况时,你想要做的事情并不十分清楚。我猜你只是把它放在这里,因为这是你运行代码的唯一方法。

    loop()

如果您正在尝试编写此类样式,那么您可能希望像这样编写它:

class InfiniteLoop:
    def __init__(self):
        self.loop()

    def input(self):
        print("No input here!")

    def loop(self):
        while True:
            self.input()

InfiniteLoop()

或者,更好的是你可以在没有课程的情况下编写它:

def my_input(): # not input, to avoid shadowing the input() function
    print("Nope, still no input")


def loop():
    while True:
        my_input() # No global necessary, you can see the function from here!

[1]:不是真的,但做其他事情可能只是为了娱乐和学习。

答案 1 :(得分:1)

class InfiniteLoop():
    def input(self):
        print "Hello"

    def loop(self):
            var =1
            while var == 1:
                self.input()


if __name__ == "__main__":
    A = InfiniteLoop()
    A.loop()

我意识到你是新手,但是互联网上有许多有用的教程是免费的。您可能希望在发布SO之前阅读它们。希望上面的代码可以帮助您入门。

答案 2 :(得分:0)

发生了什么

不是你的程序冻结,它是Python解释器解析器在读取程序的最后一行时卡住了。如果您按几次Enter键,它将被取消并打印此

Traceback (most recent call last):
  File "infiniteloop.py", line 1, in <module>
    class InfiniteLoop:
  File "infiniteloop.py", line 15, in InfiniteLoop
    loop()
  File "infiniteloop.py", line 13, in loop
    input = input() #
  File "<string>", line 0

我不是语言律师所以我不能告诉你那里发生了什么。在类定义中,您确实具有def function_name(self, param1, param2, ...):构造或者在注释之前。如果您尝试在那里调用函数/方法,我不会有任何想法。

我所知道的是,根据您可能尝试完成的事情判断,您的语法错误。

语法正确的版本

你的最后一行有缩进错误。它不应该缩进,它不是该类的一部分,它应该与类声明处于同一级别。

您的程序的语法正确版本将是

class InfiniteLoop:
    def input():
        print("Hello")
        #num = raw_input("Enter a number: ")
        #print "You entered: ", num

    def loop():
        global input 
        #input = input()
        var = 1
        while var == 1:
            input = input() #

loop()

当然,这不会运行,因为在任何地方都没有名为loop的顶级函数。但语法现在是正确的。

错误看起来像这样

Traceback (most recent call last):
  File "syntax", line 14, in <module>
    loop()
NameError: name 'loop' is not defined

至于如何解决它,你可以参考其他答案之一。最重要的是,Python中的方法确实将它们的this对象(实际上是self对象,因为它习惯于在Python中调用它)作为它们的第一个参数。因此,您必须使用def method_name(self, some, other, params):声明方法。

我该怎么做

保持简单。当你的意思只是几个函数时,不要声明一个类。只是为了确保,你不必在Python程序中声明一个类。

def get_user_input():
    print("Hello")
    num = raw_input("Write something and press Enter: ")
    return num

def main():
    while True:
        input = get_user_input()
        print "You entered: ", input

if __name__ == '__main__':
    main()

如果文件是直接执行的,if __name__构造是一种有用的运行方式,但如果文件是从其他地方包含的话,则不运行代码。

总结

阅读这个问题,答案以及免费阅读Dive into Python的书籍Learning Python coming from PHP;)