如何使用具有任意数量元素的占位符创建 python 字符串

Posted

技术标签:

【中文标题】如何使用具有任意数量元素的占位符创建 python 字符串【英文标题】:How can I create python strings with placeholders with arbitrary number of elements 【发布时间】:2011-03-28 23:44:39 【问题描述】:

我可以的

string="%s"*3
print string %(var1,var2,var3)

但我无法将变量放入另一个变量中,以便我可以使用应用程序逻辑动态创建变量列表。 例如

if condition:
  add a new %s to string variable
  vars.append(newvar)

else:
  remove one %s from string
  vars.pop()
print string with placeholders

关于如何使用 python 2.6 做到这一点的任何想法?

【问题讨论】:

这看起来非常复杂。为什么要构建一个大格式字符串和一个大值列表?为什么不将格式应用于值并将其附加到结果中?请显示更多您认为需要此内容的上下文。听起来一切都可以简化。 我不完全确定您要在这里完成什么,但我会尝试回答。 【参考方案1】:

这个怎么样?

print ("%s" * len(vars)) % tuple(vars)

真的,这是一种相当愚蠢的做事方式。如果您只想将所有变量压缩到一个大字符串中,这可能是一个更好的主意:

print ''.join(str(x) for x in vars)

这至少需要 Python 2.4 才能工作。

【讨论】:

【参考方案2】:

在打印之前使用列表添加/删除字符串然后 "".join(yourlist)

>>> q = []
>>> for x in range(3):
    q.append("%s")
>>> "".join(q)
'%s%s%s'
>>> print "".join(q) % ("a","b","c")
abc

【讨论】:

绝对同意——不要这样做!但是,如果出于某种原因您真的希望能够从字符串中 remove 格式(呃!),那么这似乎是最简单的方法。如果可能的话,最好避免这种情况。【参考方案3】:
n = 0
if condition:
  increment n
  vars.append(newvar)

else:
  decrement n
  vars.pop()

string = "%s" * n
print string with placeholders

但如果你只是加入 vars,你并不真的需要字符串格式化;为什么不这样做:

"".join( map( str, vars ) )

【讨论】:

以上是关于如何使用具有任意数量元素的占位符创建 python 字符串的主要内容,如果未能解决你的问题,请参考以下文章

python 建立CNN用的占位符,任意图片数

如何阻止占位符转换回来? (CSS)

创建具有不同颜色和字体的 UITextView 占位符

具有存储属性的扩展

Python 3 类型,具有任意数量的包含类型的自定义可变参数泛型,如何?

列出所有具有占位符图像的产品