我有一个Python,我想在一个\include文件中使用它。但是,我的字符串有一个下划线字符(_),它需要在包含之前转换为\_ (这是latex表示)。
如果我这样做了:
self.name = self.laser_comboBox.currentText() #Get name from a qt widget
latex_name = self.name.replace("_", r"\_") #Replacing _ for \_
print self.name
print latex_name我会得到:
XXXXXX-YY\_SN2017060009
XXXXXX-YY\_SN2017060009可以看出,这两个变量都被替换了。这意味着replace方法发生在内部。然而,如果我这样做了:
self.name = self.laser_comboBox.currentText() #Get name from a qt widget
latex_name = str(self.name).replace("_", r"\_") #Converting to str and then replacing _ for \_
print self.name
print latex_name我会得到:
XXXXXX-YY_SN2017060009
XXXXXX-YY\_SN2017060009这件事让我很困惑.我想知道为什么会这样.
发布于 2017-06-28 12:11:20
我在这里做了一些测试,我想我找到了答案。
我的var self.name有一个<class 'PyQt4.QtCore.QString'>类型,因为我是从QtWidget获得它的。有人,如果我错了,请纠正我,但是从我运行的测试和docs (http://doc.qt.io/qt-5/qstring.html#replace)来看,<class 'PyQt4.QtCore.QString'>中的replace方法似乎发生在适当的位置。而对于Python,它并不是这样,因为str字符串是不可变的。
因此,简而言之:
str:inplace=False (inplace=False字符串是不可变的)PyQt4.QtCore.QString:inplace=True不管怎样,希望这能帮上忙
发布于 2017-06-28 12:29:05
当您执行self.name时,实际上是在替换对象name字符串上的位置。
但是,当您执行str(self.name)时,您将替换由str创建的新对象,而不是self.name。因此,self.name保持不变。
https://stackoverflow.com/questions/44802050
复制相似问题