我怎样才能避免调用函数重新输入长变量名
我怎样才能避免这样的行:我怎样才能避免调用函数重新输入长变量名
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)
内部print语句显示预期:axxxc 调用REPL后print语句显示不变:abbbbc
当然,它的工作原理,如果我放弃并接受多余的打字:
this_long_variable_name = repl('b', 'x', this_long_variable_name)
顺便说一句,这不只是关于什么被重新输入的长度,即使该变量的名称是“一个,”我不希望重新输入一个= a.replace(。 ..)
由于在功能s是一个参数,我不能这样做: 全球小号
我甚至尝试:
this_long_variable_name.repl('b', 'x')
这表明你怎么都有点我理解,以及如何绝望的我。
您遇到的问题是Python字符串是不可变的。 str.replace()
返回一个全新的字符串,因此在s = s.replace(myfind, myreplace)
中,名称s
不再引用原始字符串,这就是为什么在函数名称空间的外部看不到任何更改的原因。
这可能不是一个很好的解决您的问题。我建议使用具有自动完成功能的现代IDE或Python REPL来缓解它。尝试滥用写这样的东西的标准方式可能会让你感觉不错,但它会让其他人看着你的代码感到困惑。
我使用Notepad ++,并辅以一些Autohotkey宏。不理想,但不坏。有没有一个IDE可以让所有酷酷的孩子们使用? –
@HarryBinswanger我喜欢PyCharm,但有很多选择。谷歌搜索“python ide”会给你一个概述。 –
Harry不起作用,因为在您的repl功能中,您实际上拥有this_long_variable_name
的内容的本地副本。这被称为“通过复制”,这意味着python将副本移交给函数。不幸的是,这是python如何做到的。检查也在这里:
Python: How do I pass a string by reference?
而且字符串在Python不变,所以如果你想改变它们,你总是创建一个新的修改版本。查看此处:
Aren't Python strings immutable?
的问题是,你为什么要在第一时间需要长变量名?
Python不是通过复制 - 请参阅[本讲座](https://youtu.be/_AEJHKGk9ns)以获得绝佳的概述。 –
谢谢,所有。我回应了避免“臭”代码的愿望。简而言之,这首先激发了这一点。我明白字符串是不可变的,我几乎可以理解通过引用与按值传递。几乎。 :)我使用长文件名(很少和我的例子一样)来使代码自我记录。好吧,不是自我记录,而是朝着这个方向迈出的一步。感谢所有人,我接受了鞠躬头的失败。 –
字符串是不可变的,参数是*按值调用*所以你不能这样做。 –
我的意思是说,出于某种原因我们可以这样做。 'repl('a','b',some_function_call('with','arguments'))'的结果是什么?在这种情况下,没有对字符串的引用(我们有)。 –
恐怕输入它是你最好的选择。虽然是的,但是有些事情可以解决这个问题,他们所要做的就是让代码变得很臭。输入它是1)对于阅读你的代码的人来说至少是令人困惑的,2)唯一的解决方案不涉及做难看的事情。 –