首页 > 解决方案 > 在 Thread 构造函数中定义 `args` 的更好方法?

问题描述

创建线程时,您将参数作为可迭代对象传递,通常是这样的元组:

import threading
import time

def countdown(secs):
    for second in range(secs, 0, -1):
        print(f"{second}!", end = " ")
        time.sleep(1)
    print("Happy New Year!")

countdown_thread = threading.Thread(target=countdown, args=(5,))
countdown_thread.start()
countdown_thread.join()

我认为这(5,)在语法上很粗糙,并且更难解释发生了什么。这条线同样有效:

countdown_thread = threading.Thread(target=countdown, args=[5])

有没有充分的理由不简单地将列表而不是元组传递给Thread?我不想让人们误入歧途。

如果没有充分的理由不使用列表,我会在教别人时按照我的意见行事。

标签: pythonmultithreading

解决方案


文档说:

“args 是目标调用的参数元组。默认为 ()。” 参考

它接受列表的事实是一个错误,可能会或可能不会在未来的实现中修复。或者他们可能会更改文档。如果您想保证您的代码在未来可以正常工作,您最好坚持使用文档保证可以工作的内容。


推荐阅读