import sched, time
s = sched.scheduler(time.time, time.sleep)
def do_something(sc):
print("Doing stuff...")
s.enter(5, 1, do_something, argument=(sc,))
s.enter(5, 1, do_something, argument=(s,))
s.run()
在这个代码位中,我使用sched lib来创建一个函数循环。在这里我注意到,当我们分配一个参数时,会有一个尾随的逗号。我想知道为什么会这样?
当我删除尾随逗号时,它会返回错误信息:
*之后的do_something()参数必须是可迭代的,而不是调度程序
在其他尾随逗号的问题中,人们说尾随逗号会将int变为元组。在这里,当我添加尾随逗号时,s
的值类型仍然是调度程序对象。
答案 0 :(得分:2)
元组只需要,
个逗号,它们不需要()
个括号,除非他们这样做!例如在:
x = 1, 2, 3
y = (1, 2, 3)
和
x = 1,
y = (1,)
在这两种情况下,x
和y
都是相同的。但在你的情况下:
s.enter(5, 1, do_something, argument=(sc,))
s.enter(5, 1, do_something, argument=sc,)
正如你发现的那样,不一样。为什么呢?
在第二种情况argument=sc,
中,,
被解释为参数列表,
的一部分,因此不会将其视为{ {1}}。在这种情况下,您需要tuple()
来构建(sc,)