Str替换方法就地发生了

Edu*_*rdo 4 python string qt replace str-replace

我有一个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
Run Code Online (Sandbox Code Playgroud)

我去拿:

XXXXXX-YY\_SN2017060009
XXXXXX-YY\_SN2017060009
Run Code Online (Sandbox Code Playgroud)

可以看出,两个变量都被替换了.这意味着该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
Run Code Online (Sandbox Code Playgroud)

我去拿:

XXXXXX-YY_SN2017060009
XXXXXX-YY\_SN2017060009
Run Code Online (Sandbox Code Playgroud)

这让我很困惑......我想知道为什么会这样......

Edu*_*rdo 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字符串是不可变的.

简而言之:

  • Python str:( inplace=FalsePython字符串是不可变的)
  • PyQt4.QtCore.QString: inplace=True

无论如何,希望这会有所帮助