如何使用具有任意数量元素的占位符创建 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章