我有一个问题;我有一些线程的代码:
if __name__ == "__main__":
x = makeThread("Thread 1", thread_function, ThreadKeyArg = "PersonalKeyn")
xx = makeThread("Thread 2", thread_function, ThreadIDArg = 11111)
xxx = makeThread("Thread 3", thread_function, ThreadKeyArg = "AnotherPersonalKeyn")
xxxx = makeThread("Thread 4", thread_function, ThreadIDArg = 1234)
然后,我问x是在locals()
中还是在globals()
中。如果该语句为true,则出现print("something")
。这是代码的一部分:
if x in locals() or globals():
print("something")
此代码确实使if
语句为true,因此它确实打印文本。然而,当我放置if x in locals()
或if x in globals()
时,它们都不是print("something")
。现在,这个不会给我带来任何问题,我只是想知道为什么会这样。
这里有两个问题。
-
x in locals() or globals()
不分发in
测试来检查这两个字典。它的工作原理类似于(x in locals()) or globals()
,如果globals()
不为空,它将始终是真实的。如果你想在每个dict中测试成员资格,你需要x in locals() or x in globals()
-
x in locals()
不会做你想做的事。你可能是指"x" in locals()
。否则,您将测试x
的值是否也是locals()
dict中的键(例如,变量名(。由于x
的值可能是某种线程对象,所以这永远不会起作用。如果要测试文本变量名称"x"
,请使用字符串。