我有一个类,我希望在某些情况下能够对其进行按位运算。
class Measurement(object):
def __init__(self, value = None, category = None, measure = None):
self.value = value
self.category = category
self.measure = measure
def __nonzero__(self):
return self.value.__nonzero__()
def __or__(self, other):
return self.__nonzero__() | other
a = False
b = Measurement(True)
Run Code Online (Sandbox Code Playgroud)
此时c = b | a可以工作,但c = a | b会出现类型错误。我怎样才能让它双向工作?
另外,有没有更优雅的方法来做到这一点;例如,我曾希望通过定义__nonzero__,我可能会得到正确的行为,但事实并非如此。
我正在使用Python 2.7。
我正在尝试将 excel 工作表添加到工作簿的末尾,保留第一个工作表作为摘要。
import win32com.client
Excel = win32com.client.DispatchEx('Excel.Application')
Book = Excel.Workbooks.Add()
Excel.Visible = True
Book.Worksheets(3).Delete()
Book.Worksheets(2).Delete()
Sheet = Book.Worksheets(1)
Sheet.Name = "Summary"
Book.Worksheets.Add(After=Sheet)
Sheet = Book.Worksheets(2)
Sheet.Name = "Data1"
Run Code Online (Sandbox Code Playgroud)
此代码将新工作表添加到左侧,尽管使用After=Sheet,并且当我修改名为“Data1”的工作表时,它会覆盖名为“Summary”的工作表。
这类似于这个问题:
在 Excel 中将工作表添加到工作簿的末尾(正常方法不起作用?)
但给定的解决方案对我不起作用。
我正在尝试使用 cProfile 来分析一些 python 代码。我相信我需要使用cProfile.runcall(),而不是cProfile.run(),因为我想要运行的方法是形式self.funct()而不是简单的funct()。
当我尝试使用此处cProfile.runcall详细说明时,出现以下错误:
AttributeError: 'module' object has no attribute 'runcall'
是否从 cProfile 中删除了 runcall 方法?如果是这样,是否有使用表单的替代方法cProfile.runcall(self.funct,*args)?
最小(非)工作示例:
import cProfile
def funct(a):
print a
cProfile.runcall(funct,"Hello")
Run Code Online (Sandbox Code Playgroud) 要在Python 2.7中调用父类的构造函数,我看到的标准代码是:
super(Child, self).__init__(self, val),
Child儿童班在哪里.(在Python 3.x中,这是简化的,但我现在必须使用2.7.)我的问题是,在python 2.7中使用super的"规范"不是更好:
super(self.__class__, self).__init__(self, val)?
我测试了这个,它似乎工作.有没有理由不使用这种方法?
在Python Qt中,我将一个QListWidget信号连接到一个插槽,如下所示:
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
Run Code Online (Sandbox Code Playgroud)
我的问题是:尾随星号的作用是QListWidgetItem *什么?
我在python中创建了一大堆元素,我将打印到Excel电子表格中.顺序和最终维度在某种程度上是可以预测的,但对它们进行硬编码本质上是脆弱的.我想找到一种动态调整数组大小的方法,如果它不够大的话.
元素添加的顺序可能不是顺序的,因此追加不能直接起作用.我需要能够在2D数组中分配任何元素,并调整数组大小以处理它,如下所示:
data = magic_array()
data[3][5] = 35
Run Code Online (Sandbox Code Playgroud)
是否存在允许此行为的内置功能?如果没有,你能推荐一个好方法来实现吗?
我一直用一些代码帮助一个新的Python用户,他问我为什么python解释器在实际错误之后会在行上显示一些语法错误.请考虑以下代码:
x = [1, 2, 3
print x
Run Code Online (Sandbox Code Playgroud)
将显示该行的语法错误print x,尽管错误确实在前一行.
这可能是非常令人困惑(并且浪费时间)第一次遇到它,这是一个非常常见的问题(在您最喜欢的搜索引擎上搜索"python语法错误"),似乎并不难纠正......为什么还没有修好?目前的方法有一些好处吗?
我正在使用使用 QT Designer 生成的 python 代码。我想通过 MainWindow 上的按钮打开一个新对话。当我使用以下代码时,对话窗口一创建就消失了。我认为这是因为 QDialog 对象在该方法命中 return 语句时被销毁。调用这种对话的正确方法是什么?
def OpenDialogue(self):
DialogueWindow = QtGui.QDialog()
my_dialogue = MyDialogue.Ui_Dialog()
my_dialogue.setupUi(DialogueWindow)
DialogueWindow.show()
return
Run Code Online (Sandbox Code Playgroud)
例如,我应该在定义 MainWindow 的同一位置实例化 DialogueWindow 并将其传递给此方法吗?
MainWindow 构造函数如下:
class Ui_MainWindow(QtGui.QMainWindow, object):
def setupUi(self, MainWindow):
[code]
Run Code Online (Sandbox Code Playgroud)
它的实例化如下:
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = GUI.Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud) python ×8
python-2.7 ×6
pyqt ×2
cprofile ×1
excel ×1
inheritance ×1
pyqt4 ×1
python-3.x ×1
qt ×1
qt-designer ×1
super ×1
win32com ×1