将函数传递给函数

2024-09-30 12:15:41 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我在python中发现了一些错误,但我似乎找不到它们

def dictionaryObjectParsed():
    a = []
    b = []
    a, b = zip(*(map(lambda x: x.rstrip('\n\r').split('\t'), open('/Users/settingj/Desktop/NOxMultiplier.csv').readlines())))
    for x in range(0,len(a)):
        print a[x]
        print b[x]

def timer(f):
    threading.Timer(1, timer, f).start()
    print time.strftime('%I:%M:%S %p %Z')

timer(dictionaryObjectParsed)

这是我得到的错误

^{pr2}$

我可以早些时候这样做,但我想我做了一些事情,造成这个错误,什么见鬼:(

我显然是在给计时器函数传递参数。。。正确的?在

编辑

我也试过timer(dictionaryObjectParsed)但什么也没有。。。在

另外,很抱歉,这只是我在python的第二天。。。:P


Tags: lambdamapdef错误openzipuserssplit
3条回答

实例化Timer Instance的实际语法是

threading.Timer(interval, function, args=[], kwargs={})

在你的实施中有两个问题

  1. 您正在注册一个接受1个参数而不向注册函数传递任何参数的函数
  2. 您正在计时器例程中递归地注册调用者函数。在

我相信,您的目的是注册函数参数,而不是调用函数。最终会将您的实现更改为

^{pr2}$

但是由于一些奇怪的原因,如果要注册调用函数,还需要将参数作为参数传递给线程。计时器,符合文档中的语法

^{3}$

您有多个错误。在

试试这个:

def timer(f):
    f()                           # NOTE THIS NEW LINE
    threading.Timer(1,timer, f).start()  # NOTE CHANGE ON THIS LINE
    print time.strftime('%I:%M:%S %p %Z')

timer(dictionaryObjectParsed)     # NOTE CHANGE ON THIS LINE

注意,在最后一行,您希望传递函数,而不是调用函数的结果。在

请注意,在threading.Timer ...行上,您需要传递足够的参数,以使timer()的后续调用具有正确数量的参数。在

注意没有它的新行,dictionaryObjectParsed将永远不会被调用!在

传递函数而不调用它(删除“()”)。。在

timer(dictionaryObjectParsed)

以及

^{pr2}$

而不是

^{3}$

我认为,您试图创建一个递归计时器函数是错误的。您得到的错误是在没有函数参数的情况下再次调用函数“timer”。我认为这是个简单的错误。在


好的,那么您确实需要一个递归函数,那么试试这个:

def timer(f):
    threading.Timer(1,timer,[f,]).start()
    f()
    print time.strftime('%I:%M:%S %p %Z')

工作了吗?在

相关问题 更多 >

    热门问题