我有一个Python字符串,我希望在一个乳胶文件中\include
。但是,我的字符串有一个下划线字符(_
),在包含之前需要将其转换为\_
(这是_的乳胶表示)。
如果我这样做:
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
这让我很困惑......我想知道为什么会这样......
答案 0 :(得分:7)
我在这里进行了一些测试,我想我已经找到了答案。
我的var self.name
有<class 'PyQt4.QtCore.QString'>
类型,因为我是从QtWidget获取的。
有人,如果我错了,请纠正我,但是从我运行的测试和文档(http://doc.qt.io/qt-5/qstring.html#replace)来看,replace
中的<class 'PyQt4.QtCore.QString'>
方法似乎就位。而对于Python str
,它不会,因为python字符串是不可变的。
简而言之:
str
:inplace=False
(Python字符串是不可变的)PyQt4.QtCore.QString
:inplace=True
无论如何,希望这会有所帮助
答案 1 :(得分:0)
执行self.name
时,您实际上正在替换对象name
字符串。
但是当您执行str(self.name)
时,您正在替换由str
创建的新对象,而不是self.name
。因此self.name
保持不变。