当if语句同时包含globals()和locals()时,x仅在globals(或locals(中



我有一个问题;我有一些线程的代码:

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")。现在,这个不会给我带来任何问题,我只是想知道为什么会这样。

这里有两个问题。

  1. x in locals() or globals()不分发in测试来检查这两个字典。它的工作原理类似于(x in locals()) or globals(),如果globals()不为空,它将始终是真实的。如果你想在每个dict中测试成员资格,你需要x in locals() or x in globals()

  2. x in locals()不会做你想做的事。你可能是指"x" in locals()。否则,您将测试x是否也是locals()dict中的键(例如,变量名(。由于x的值可能是某种线程对象,所以这永远不会起作用。如果要测试文本变量名称"x",请使用字符串。

相关内容

  • 没有找到相关文章

最新更新