如何避免使用以下行:
this_long_variable_name = this_long_variable_name.replace('a', 'b')
我以为我可以通过制作一个函数来避免它,repl,
def repl(myfind, myreplace, s):
s = s.replace(myfind, myreplace)
print(s) # for testing purposes
return s
但由于我不了解本地命名空间和全局命名空间的内容,我无法获得函数来返回this_long_variable_name的更改值。以下是我尝试过的内容:
this_long_variable_name = 'abbbc'
repl('b', 'x', this_long_variable_name)
print('after call to repl, this_long_variable_name =', this_long_variable_name)
内部打印语句显示预期:axxxc 调用repl后的print语句显示未更改:abbbbc
当然,如果我放弃并接受冗余打字,它就有效:
this_long_variable_name = repl('b', 'x', this_long_variable_name)
顺便说一下,即使变量的名称是' a,'我不想重新输入a = a.replace(...)
因为在函数s中是一个参数,我不能这样做: 全球的
我甚至尝试过:
this_long_variable_name.repl('b', 'x')
向你展示了我的理解力度以及我的绝望程度。
答案 0 :(得分:1)
您遇到的问题是Python字符串是不可变的。 str.replace()
会返回一个全新的字符串,因此在s = s.replace(myfind, myreplace)
中,名称s
不再引用原始字符串,这就是为什么您在函数外部看不到任何更改的原因命名空间。
您的问题可能没有很好的解决方案。我建议使用具有自动完成功能的现代IDE或Python REPL来缓解它。试图滥用标准的写作方式可能对你感觉很好,但是会让其他人看到你的代码时感到困惑。
答案 1 :(得分:0)
哈利它不起作用,因为在你的repl函数中,你实际上有this_long_variable_name
内容的本地副本。这称为“通过副本传递”,这意味着python将副本移交给该函数。不幸的是,python就是这样做的。请点击此处:
Python: How do I pass a string by reference?
字符串在python中也是不可变的,所以如果你想改变它们,你总是创建一个新的修改版本。点击这里:
Aren't Python strings immutable?
问题是为什么你首先需要长变量名?