在sched.scheduler.enter'中分配参数参数的尾随逗号

时间:2018-01-31 00:43:40

标签: python tuples

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的值类型仍然是调度程序对象。

1 个答案:

答案 0 :(得分:2)

元组只需要,个逗号,它们不需要()个括号,除非他们这样做!例如在:

x = 1, 2, 3
y = (1, 2, 3)

x = 1,
y = (1,)

在这两种情况下,xy都是相同的。但在你的情况下:

s.enter(5, 1, do_something, argument=(sc,))
s.enter(5, 1, do_something, argument=sc,)

正如你发现的那样,不一样。为什么呢?

在第二种情况argument=sc,中,,被解释为参数列表,的一部分,因此不会将其视为{ {1}}。在这种情况下,您需要tuple()来构建(sc,)