线程内的 print() 输出错误值

kai*_*iro 1 python sorting multithreading

我正在尝试重新创建一个称为睡眠排序的愚蠢想法,但是输出远非预期。

我期待

0
1
2
3
5
Run Code Online (Sandbox Code Playgroud)

但是我得到

0
5
5
5
5
Run Code Online (Sandbox Code Playgroud)

...这很奇怪,因为线程确实:休眠(项目)秒,然后打印该项目。

这是我的代码

0
1
2
3
5
Run Code Online (Sandbox Code Playgroud)

我的代码有问题吗?非常感谢您提前!

Nob*_*bbs 5

这是许多语言的典型行为,由“后期绑定”引起。您应该明确传递参数以避免这种情况,并且还应该使用诸如“python 后期绑定”之类的东西。

def sleepSort(lst):
    for item in lst:
        threading.Thread(target = lambda item: (
            time.sleep(item),
            print(item)
        ), args=(item, )).start()
Run Code Online (Sandbox Code Playgroud)