因此,虽然我已经在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)
答案 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;)