首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >threading.Timer()

threading.Timer()
EN

Stack Overflow用户
提问于 2013-05-16 11:44:48
回答 2查看 79.7K关注 0票数 28

我必须在网络课程中写一个程序,有点像选择性重复,但需要一个计时器。在谷歌上搜索后,我发现threading.Timer可以帮助我,我写了一个简单的程序来测试threading.Timer是如何工作的,就是这样:

代码语言:javascript
复制
import threading

def hello():
    print "hello, world"

t = threading.Timer(10.0, hello)
t.start() 
print "Hi"
i=10
i=i+20
print i

此程序运行正常。但是当我试图以如下方式定义hello函数时,参数如下:

代码语言:javascript
复制
import threading

def hello(s):
    print s

h="hello world"
t = threading.Timer(10.0, hello(h))
t.start() 
print "Hi"
i=10
i=i+20
print i

输出结果是:

代码语言:javascript
复制
hello world
Hi
30
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 522, in __bootstrap_inner
    self.run()
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/threading.py", line 726, in run
    self.function(*self.args, **self.kwargs)
TypeError: 'NoneType' object is not callable

我不明白问题出在哪里!有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-16 11:50:59

您只需将hello的参数放入函数调用中的单独项中,如下所示:

代码语言:javascript
复制
t = threading.Timer(10.0, hello, [h])

这是Python中的一种常见方法。否则,当您使用Timer(10.0, hello(h))时,此函数调用的结果将传递给Timer,它是None,因为hello不会显式返回。

票数 61
EN

Stack Overflow用户

发布于 2020-10-26 15:46:28

如果您想使用普通函数参数,另一种方法是使用lambda。基本上,它告诉程序参数是一个函数,不能在赋值时调用。

代码语言:javascript
复制
t = threading.Timer(10.0, lambda: hello(h))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16578652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档