如何在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)