线程中的join()函数
我最近想搞明白join()这个函数,但看了很多教程和文档,还是搞不懂。有没有人能帮我解释一下这个函数呢?
1 个回答
多线程的 join
方法
关于线程和多线程中使用 join
,你会用到 t.join()
。简单来说,这个方法就是让你请求与一个线程“合并”,也就是等待这个线程完成它的工作。你的程序会一直运行,直到所有线程都结束。如果有线程运行时间很长,可以把它设置为守护线程!也就是说,可以通过以下方式让线程成为守护线程:
t= Thread(target=entry, args=(5,), daemon=True)
t.start()
这里的 daemon=True
是代码中最重要的部分,如果需要的话我可以进一步解释。
这对于处理任何后台任务非常有用。当主线程结束时,守护线程会自动被清除。
字符串的 join
方法
要理解 join()
函数,可以想象一下 Python 的创造者为什么要把这个命令叫做 join()
……他们想要创建一个可以灵活地“连接东西”的命令。想象一下“东西”是一堆字符串。现在假设你想把这些字符串都放在一起,并且希望这样做的速度很快(后面会详细讲),那么你该怎么做呢?你就用 join()
来以你想要的灵活方式组合这些字符串。灵活的意思是,你可以选择用空格、逗号,或者根本不加空白来连接它们等等。例如,考虑这个不同字符串的列表:
my_list = ['I', 'love', 'join', 'so', 'much']
现在我们来看一些使用 join()
灵活连接这个列表的例子(几乎可以用任何方式):
','.join(my_list)
输出结果是:
'I,love,join,so,much'
或者我们试试这个:
''.join(my_list)
输出结果是:
'Ilovejoinsomuch'
再试这个例子:
' '.join(my_list)
输出结果是:
'I love join so much'
注意在所有这些情况下,你的字符串列表都被连接成了一个字符串,并且你可以精确指定连接的方式。join()
的真正强大之处在于,你想连接的对象可以是各种不同类型:字典、列表、元组、生成器等等。如果一个一个地对这些不同的对象实现 join()
,那可就不够 Python 风格了 ;) 这就是 Python 的优势所在,它可以将这些不同类型的结构连接在一起,而你只需告诉它你想要怎样连接。这就是你的灵活性所在。
现在我想给你展示一个很酷的例子,使用生成器表达式来组合不同类型的对象:
my_list = ['I', 20, 'same']
print ' '.join(str(x) for x in my_list)
这会打印出以下输出:
'I 20 same'
当然,你可以使用其他方法来连接字符串。如果你只有几个字符串需要连接,并且不需要像 join()
那样快速,你可以直接用 + 号。例如:
string1 = 'my string'
string2 = 'your string'
print(string1 + ' ' + string2)
print('{} {}'.format(string1,string2))
输出结果是:
'my string your string'
'my string your string'
但是如果你有很多字符串,使用 join()
会更好,这样可以避免内存和垃圾回收等问题。
顺便说一下,如果你想知道你得到的输出是什么类型(是字符串,还是其他什么),你可以输入例如:
print type('{} {}'.format(string1,string2))
你的输出将是 <type 'str'>
,这样你就知道了!
希望这对你有帮助!