按功能更改字符串值

imp*_*meh 5 python

也许这是一个愚蠢的问题,但是我注意到我的代码中有许多这样的语句:

var = "some_string"
var = some_func(var)
var = another_func(var)
print var # outputs "modified_string"
Run Code Online (Sandbox Code Playgroud)

这真的让我很烦,看起来很糟糕(与整个python相反)如何避免使用它并以这种方式开始使用它:

var = "some_string"
modify(var, some_func)
modify(var, another_func)
print var # outputs "modified_string"
Run Code Online (Sandbox Code Playgroud)

先感谢您

Tom*_*koo 5

这可能不是最“pythonic”的事情,但您可以字符串“包装”在列表中,因为列表在 Python中可变的。例如:

var = "string"
var_wrapper = [var]
Run Code Online (Sandbox Code Playgroud)

现在您可以将该列表传递给函数并访问其唯一元素。更改后,它将在函数外部可见:

def change_str(lst):
    lst[0] = lst[0] + " changed!"
Run Code Online (Sandbox Code Playgroud)

你会得到:

>>> change_str(var_wrapper)
>>> var_wrapper[0]
"string changed!"
Run Code Online (Sandbox Code Playgroud)

为了使事情更具可读性,您可以更进一步并创建一个“包装器”类:

var = "string"
var_wrapper = [var]
Run Code Online (Sandbox Code Playgroud)

现在让我们运行相同的示例:

>>> var = my_str("string")
>>> var
string
>>> var.change_str("new string!")
>>> var
new string!
Run Code Online (Sandbox Code Playgroud)

* 感谢@Error-SyntacticalRemorse对创建类的评论。


Dae*_*yth 0

字符串在 python 中是不可变的,所以你的第二个例子无法工作。在第一个示例中,您将名称绑定var到每行上的全新对象。

通常,像这样对单个名称进行多次分配会产生代码味道。也许如果您发布了更大的代码示例,这里的人可以向您展示更好的方法?