如何在Python中动态生成字符串(观察者模式)

如何在Python中动态生成字符串(观察者模式),python,string,dynamic,observer-pattern,Python,String,Dynamic,Observer Pattern,假设我们有下面的代码: var1="top" var2=var1+"bottom" 如果条件为真,我们希望更改var1值: if COND==True: var1="changed" 现在我想动态更改var2。使用上面的代码,var2仍将具有值“topbottom” 我该怎么做 谢谢您可以使用字符串格式在var2中指定一个占位符,将var1的更新值放置在该占位符中: In [1653]: var2 = '{}bottom' 此处的{}括号指定占位符。然后根据需要调用将var1插入var

假设我们有下面的代码:

var1="top"
var2=var1+"bottom"
如果条件为真,我们希望更改
var1
值:

if COND==True:
  var1="changed"
现在我想动态更改
var2
。使用上面的代码,
var2
仍将具有值“
topbottom

我该怎么做


谢谢

您可以使用字符串格式在
var2
中指定一个占位符,将
var1
的更新值放置在该占位符中:

In [1653]: var2 = '{}bottom'
此处的
{}
括号指定占位符。然后根据需要调用将
var1
插入
var2

In [1654]: var1 = 'top'

In [1655]: var2.format(var1)
Out[1655]: 'topbottom'

In [1656]: var1 = 'changed'

In [1657]: var2.format(var1)
Out[1657]: 'changedbottom'

您可以通过以下程序包中的回调代理优雅地实现这一点:


每次访问
var2
,都会执行回调lambda并返回一个动态生成的值。

没有简单的方法可以做到这一点,因为字符串在python中是不可变的。在
var1+“bottom”
评估之后,无法更改
var2
。您要么需要创建一个新字符串(不确定为什么不想这样做),要么需要编写自己的类并创建自己的对象来接受此行为。如果您想这样做,请像其他人所说的那样查看一下

,因为字符串是不可变的,您必须找到一种方法在字符串的形成上插入动态值

我非常喜欢Python中的新“fstrings”——flare的单行“if”语句:

cond = True

var1 = "changed" if cond is True else "top"
var2 = f"{var1} bottom"

print(var2)

字符串是不可变的,因此不能有任何这样的动态更改,除非您使用新值创建一个新的字符串对象。
cond = True

var1 = "changed" if cond is True else "top"
var2 = f"{var1} bottom"

print(var2)