Python多个线程用于继续循环直至用户输入.帮助理解所要求的示例



我正在实现一个循环,该循环应继续,直到用户按照此页面上的说明按返回键,我才能正常工作:

def _input_thread_2( L ):
    raw_input()
    L.append( None )
#### test _input_thread()
L = []
thread.start_new_thread(_input_thread_2, (L, ))
while True: 
    time.sleep(1)
    print "nstill going..."
    if L: 
        break

我的问题是为什么以下看似简单的改编不起作用?它不是在按下键时退出环路,而只是保持循环:

def _input_thread_3( keep_going ):
    """ 
    Input: doesn't matter
    Description - When user clicks the return key, this changes the input to the False bool. 
    """
    raw_input()
    keep_going = False
#### test _input_thread()
keep_going = True
thread.start_new_thread(_input_thread_3, (keep_going, ) )
while True: 
    time.sleep(1)
    print "nstill going..."
    if not keep_going: 
        break

您能帮我了解这些区别吗?

在python中,为什么一个函数可以修改呼叫者所感知的某些参数,而不是其他参数?

这是原因。您的keep_alive是不变的,而列表是可变的。

这是 @hannu答案的更详细版本。

在上面的两个_input_thread()函数中,创建了输入的"副本"。在第一个中,由于L是列表(可变),因此该副本实际上是指向列表的第二个名称L。两种L的s都是不同的列表参考,但具有相同的内容。.append()方法更改列表的内容。两者都参考L看到它。

在第二版中,将新版本的名称keep_going的新版本指向(新的)bool(不可变)。因此,只有第二个版本被更改,并且while循环永远不会看到它。

最新更新