首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原位发生的Str替换方法

原位发生的Str替换方法
EN

Stack Overflow用户
提问于 2017-06-28 12:11:20
回答 2查看 6.4K关注 0票数 7

我有一个Python,我想在一个\include文件中使用它。但是,我的字符串有一个下划线字符(_),它需要在包含之前转换为\_ (这是latex表示)。

如果我这样做了:

代码语言:javascript
复制
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

我会得到:

代码语言:javascript
复制
XXXXXX-YY\_SN2017060009
XXXXXX-YY\_SN2017060009

可以看出,这两个变量都被替换了。这意味着replace方法发生在内部。然而,如果我这样做了:

代码语言:javascript
复制
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

我会得到:

代码语言:javascript
复制
XXXXXX-YY_SN2017060009
XXXXXX-YY\_SN2017060009

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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字符串是不可变的。

因此,简而言之:

  • Python strinplace=False (inplace=False字符串是不可变的)
  • PyQt4.QtCore.QStringinplace=True

不管怎样,希望这能帮上忙

票数 9
EN

Stack Overflow用户

发布于 2017-06-28 12:29:05

当您执行self.name时,实际上是在替换对象name字符串上的位置。

但是,当您执行str(self.name)时,您将替换由str创建的新对象,而不是self.name。因此,self.name保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44802050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档