Python 将此计时器函数更改为接受参数

Python 将此计时器函数更改为接受参数,python,python-3.x,timer,Python,Python 3.x,Timer,我在PythonVer3.6中有一个工作计时器函数,它以2秒的间隔运行 def timer_function_working(): threading.Timer(2, timer_function_working).start() print ("stackoverflow") timer_function_working() 我希望这个timer_函数接受时间间隔作为参数。这是新代码 def timer_function(interval_sec): thread

我在PythonVer3.6中有一个工作计时器函数,它以2秒的间隔运行

def timer_function_working():
    threading.Timer(2, timer_function_working).start()
    print ("stackoverflow")

timer_function_working()
我希望这个timer_函数接受时间间隔作为参数。这是新代码

def timer_function(interval_sec):
    threading.Timer(interval_sec, timer_function).start()
    print ("stackoverflow")

timer_function(interval_sec=2)
然而,我得到了这个错误信息

TypeError: timer_function() missing 1 required positional argument: 'interval_sec'
如何将此计时器函数更改为接受参数?

根据,计时器的第一个参数是
interval

class threading.Timer(间隔、函数、args=[],kwargs={})

在第二个代码块中,第一次执行不会出现问题,因为您为
interval
提供了一个值。但是,当在
计时器
持续时间结束时调用
函数
时,您不会向函数本身传递任何参数,这会导致错误:

TypeError: timer_function() takes exactly 1 argument (0 given)
您可以通过以下方式将参数传递给
Timer
在完成时调用的函数:

import threading


def timer_function(interval_sec):
    threading.Timer(interval_sec, timer_function, args=[interval_sec]).start()
    print ("stackoverflow")


timer_function(interval_sec=2)
或者,您可以使用闭包将值
interval_sec
绑定到另一个函数,该函数在
timer_function
中定义,无需任何参数即可调用:

def timer_function(interval_sec):
    def inner_function():
        return timer_function(interval_sec)
    threading.Timer(interval_sec, inner_function).start()
    print ("stackoverflow")


timer_function(interval_sec=2)
根据,计时器的第一个参数是
interval

class threading.Timer(间隔、函数、args=[],kwargs={})

在第二个代码块中,第一次执行不会出现问题,因为您为
interval
提供了一个值。但是,当在
计时器
持续时间结束时调用
函数
时,您不会向函数本身传递任何参数,这会导致错误:

TypeError: timer_function() takes exactly 1 argument (0 given)
您可以通过以下方式将参数传递给
Timer
在完成时调用的函数:

import threading


def timer_function(interval_sec):
    threading.Timer(interval_sec, timer_function, args=[interval_sec]).start()
    print ("stackoverflow")


timer_function(interval_sec=2)
或者,您可以使用闭包将值
interval_sec
绑定到另一个函数,该函数在
timer_function
中定义,无需任何参数即可调用:

def timer_function(interval_sec):
    def inner_function():
        return timer_function(interval_sec)
    threading.Timer(interval_sec, inner_function).start()
    print ("stackoverflow")


timer_function(interval_sec=2)