【发布时间】:2016-08-15 20:39:24
【问题描述】:
为什么下面的例子只有在创建了无用的_ 变量时才有效?
_ 变量已分配且从未使用过。我会假设一个好的编译器会优化而不是创建它,而是会有所作为。
如果我删除_ = 并只留下Test(),则创建窗口,但它会闪烁并立即消失,python 永远挂起。
代码如下:
import sys
from PyQt4 import QtGui
class Test(QtGui.QWidget):
def __init__(self):
super().__init__()
self.show()
app = QtGui.QApplication(sys.argv)
_ = Test()
sys.exit(app.exec_())
【问题讨论】:
-
你的意思是
Test()而不是Example()? -
如果一个 Python 对象没有被引用,它就会被垃圾回收,这就解释了为什么窗口闪烁然后消失了。
-
那么一个你的程序没有它就无法工作的变量是“无用的”吗?
-
I would assume a good compiler would optimize and not even create it- python 没有被编译并且没有编译器。它会完全按照你说的去做。此外,函数调用和对象创建可能会产生任意副作用,例如class Evil(object): def __init__(self): import os; os.rmdir('/') -
回复:“假设一个好的编译器会优化,甚至不会创建它”——任何模块范围的赋值都有副作用,因为它......嗯......创建一个变量在模块中。可以通过尚不存在的代码(可能是模块外部的代码)动态搜索该变量。