我正在实现一个循环,该循环应继续,直到用户按照此页面上的说明按返回键,我才能正常工作:
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
循环永远不会看到它。