首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不更改原始字符串的情况下将字符串格式化为新字符串?

如何在不更改原始字符串的情况下将字符串格式化为新字符串?
EN

Stack Overflow用户
提问于 2022-09-08 15:12:41
回答 3查看 43关注 0票数 1

我有一个原始字符串:WORKER_TEMPLATE = "worker-{0}",如何最有效地使用该模板创建:"worker-0""worker-2""worker-N"?如果我只是使用字符串格式,我将失去原来的后,第一次格式化,因为它已经到位。是否有一种方法可以格式化未到位的字符串?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-08 15:15:36

str.format是不可变的,所以它不会更改原始的格式化字符串。

代码语言:javascript
复制
WORKER_TEMPLATE = "worker-{0}"
for i in range(5):
    print(WORKER_TEMPLATE.format(i))
    
worker-0
worker-1
worker-2
worker-3
worker-4

还可以使用相同格式的字符串定义生成器:

代码语言:javascript
复制
>>> def get_value(n=5):
...     for i in range(n):
...         yield WORKER_TEMPLATE.format(i)
...         
>>> values = get_value()
>>> next(values)
'worker-0'
>>> next(values)
'worker-1'
>>> next(values)
'worker-2'
票数 3
EN

Stack Overflow用户

发布于 2022-09-08 15:18:22

不,它不会。字符串在python中是不可变的,意味着一旦被分配,它就不能被替换。将此作为您的示例:

代码语言:javascript
复制
s = "worker-{0}"
s1 = s.format(1)
s2 = s.format(2)
print(s)
print(s1, s2)

产出如下:

工人-{0} 工人-1名工人-2

票数 1
EN

Stack Overflow用户

发布于 2022-09-08 15:55:31

字符串是不可变的,因此每次修改时都会创建一个新实例,请参阅为什么字符串是不可变的

代码语言:javascript
复制
n = 5
WORKER_TEMPLATE = "worker-{}"  # <- without 0
workers = list(map(WORKER_TEMPLATE.format, range(n)))

print(workers)
#['worker-0', 'worker-1', 'worker-2', 'worker-3', 'worker-4']

备注:以下是对应的内容:

代码语言:javascript
复制
s1 = "{} & {}"  
print(s1.format('a', 'b'))

代码语言:javascript
复制
s2 = "{0} & {1}"  
print(s2.format('a', 'b'))

“地点持有者”表示法的一个可能优点是多个相同值的替换:

代码语言:javascript
复制
print("{0} & {1} {0}".format('a', 'b'))
#a & b a
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73651383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档