代码之家  ›  专栏  ›  技术社区  ›  Duke Nukem

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

  •  3
  • Duke Nukem  · 技术社区  · 7 年前

    var1="top"
    var2=var1+"bottom"
    

    我们想要改变 var1 条件为true时的值:

    if COND==True:
      var1="changed"
    

    现在我想要 var2 .使用上述代码, 仍然有价值” topbottom

    我该怎么做?

    谢谢

    4 回复  |  直到 7 年前
        1
  •  3
  •   randomir    7 年前

    您可以通过回调代理优雅地实现这一点 ProxyTypes

    >>> from peak.util.proxies import CallbackProxy
    >>> var2 = CallbackProxy(lambda: var1+"bottom")
    >>> var1 = "top"
    >>> var2
    'topbottom'
    >>> var1 = "left"
    >>> var2
    'leftbottom'
    

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

        2
  •  2
  •   cs95 abhishek58g    7 年前

    var2 您希望的更新值 var1

    In [1653]: var2 = '{}bottom'
    

    这个 {} var2.format 插入 进入 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'
    
        3
  •  2
  •   pythad    7 年前

    没有简单的方法可以做到这一点,因为字符串在python中是不可变的。这是不可能的 var2 var1+"bottom" 评价您要么需要创建一个新字符串(不确定为什么不想这样做),要么需要编写自己的类并创建自己的对象来接受此行为。如果你想这样做,看看 Observer Pattern

        4
  •  1
  •   Kingbr93    4 年前

    正如其他人所说,因为字符串是不可变的,所以必须找到一种方法在字符串的形成上插入动态值。

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

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