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