如何在 Python 中动态生成字符串(观察者模式)
How to generate string dynamically in Python (Observer Pattern)
假设我们有以下代码:
var1="top"
var2=var1+"bottom"
如果条件为真,我们想更改 var1
值:
if COND==True:
var1="changed"
现在我想要 var2
动态更改。使用上面的代码,var2
仍将具有值“topbottom
”。
我该怎么做?
谢谢
您可以使用字符串格式在 var2
中指定您希望放置 var1
的更新值的占位符:
In [1653]: var2 = '{}bottom'
这里的{}
括号指定了一个占位符。然后在需要时调用 var2.format
将 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'
您可以使用 ProxyTypes
包中的回调代理优雅地实现此目的:
>>> from peak.util.proxies import CallbackProxy
>>> var2 = CallbackProxy(lambda: var1+"bottom")
>>> var1 = "top"
>>> var2
'topbottom'
>>> var1 = "left"
>>> var2
'leftbottom'
每次您访问 var2
时,都会执行回调 lambda 并返回一个动态生成的值。
没有简单的方法可以做到这一点,因为字符串在 python 中是不可变的。在 var1+"bottom"
评估后无法更改 var2
。您要么需要创建一个新字符串(不确定为什么不想这样做),要么您需要编写自己的 class 并创建自己的接受此行为的对象。如果您想这样做,请查看 Observer Pattern
正如其他人所说,由于字符串是不可变的,因此您必须找到一种方法在字符串的形成中插入动态值。
我是 Python 中新 'fstrings' 的粉丝- flare 的单行 'if' 语句:
cond = True
var1 = "changed" if cond is True else "top"
var2 = f"{var1} bottom"
print(var2)
假设我们有以下代码:
var1="top"
var2=var1+"bottom"
如果条件为真,我们想更改 var1
值:
if COND==True:
var1="changed"
现在我想要 var2
动态更改。使用上面的代码,var2
仍将具有值“topbottom
”。
我该怎么做?
谢谢
您可以使用字符串格式在 var2
中指定您希望放置 var1
的更新值的占位符:
In [1653]: var2 = '{}bottom'
这里的{}
括号指定了一个占位符。然后在需要时调用 var2.format
将 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'
您可以使用 ProxyTypes
包中的回调代理优雅地实现此目的:
>>> from peak.util.proxies import CallbackProxy
>>> var2 = CallbackProxy(lambda: var1+"bottom")
>>> var1 = "top"
>>> var2
'topbottom'
>>> var1 = "left"
>>> var2
'leftbottom'
每次您访问 var2
时,都会执行回调 lambda 并返回一个动态生成的值。
没有简单的方法可以做到这一点,因为字符串在 python 中是不可变的。在 var1+"bottom"
评估后无法更改 var2
。您要么需要创建一个新字符串(不确定为什么不想这样做),要么您需要编写自己的 class 并创建自己的接受此行为的对象。如果您想这样做,请查看 Observer Pattern
正如其他人所说,由于字符串是不可变的,因此您必须找到一种方法在字符串的形成中插入动态值。
我是 Python 中新 'fstrings' 的粉丝- flare 的单行 'if' 语句:
cond = True
var1 = "changed" if cond is True else "top"
var2 = f"{var1} bottom"
print(var2)