Python3 将 *args 和 **kwargs 传递给 threading.Timer() 和函数时遇到问题
Python3 having problems passing *args and **kwargs to a threading.Timer() and a function
出于某种原因,我无法将 *args 和 **kwargs 传递给 threading.Timer() 和函数...这是我遇到问题的代码;
from threading import Timer
def print_me(text='foo'):
print(text)
def repeat_task(delay, action, *args, **kwargs):
Timer(delay, repeat_task, (delay, action, [*args], {**kwargs}).start()
action(*args, **kwargs)
repeat_task( 5, print_me, text='bar' )
如果有人能指出我正确的方向,我将不胜感激。 :)
[*args]
和 {**kwargs}
都是无效语法。 kwargs
已经是一个dict
,所以如果你想把它当成dict,直接用就行了。 args
是一个tuple
,所以如果你想把它的值作为一个元组,直接使用就可以了,如果你因为某些原因想把它变成一个list
,你可以使用list(args)
.
您正在将这些参数传递给 Timer()
,whose parameters are defined as:
Timer(interval, function, args=None, kwargs=None)
注意那里没有 *
s:这个构造函数的 args
和 kwargs
参数是 normal 参数。
所以你的第三个参数需要是你所有的位置参数:delay
和 action
,然后是 args
的所有内容。一种方法是将列表与 +
:
一起添加
[delay, action] + list(args)
而您的第四个参数需要是关键字参数,即 kwargs
.
所以这应该有效:
Timer(delay, repeat_task, [delay, action] + list(args), kwargs).start()
出于某种原因,我无法将 *args 和 **kwargs 传递给 threading.Timer() 和函数...这是我遇到问题的代码;
from threading import Timer
def print_me(text='foo'):
print(text)
def repeat_task(delay, action, *args, **kwargs):
Timer(delay, repeat_task, (delay, action, [*args], {**kwargs}).start()
action(*args, **kwargs)
repeat_task( 5, print_me, text='bar' )
如果有人能指出我正确的方向,我将不胜感激。 :)
[*args]
和 {**kwargs}
都是无效语法。 kwargs
已经是一个dict
,所以如果你想把它当成dict,直接用就行了。 args
是一个tuple
,所以如果你想把它的值作为一个元组,直接使用就可以了,如果你因为某些原因想把它变成一个list
,你可以使用list(args)
.
您正在将这些参数传递给 Timer()
,whose parameters are defined as:
Timer(interval, function, args=None, kwargs=None)
注意那里没有 *
s:这个构造函数的 args
和 kwargs
参数是 normal 参数。
所以你的第三个参数需要是你所有的位置参数:delay
和 action
,然后是 args
的所有内容。一种方法是将列表与 +
:
[delay, action] + list(args)
而您的第四个参数需要是关键字参数,即 kwargs
.
所以这应该有效:
Timer(delay, repeat_task, [delay, action] + list(args), kwargs).start()