【问题标题】:How to account for string formatting in Python variable assignment?如何在 Python 变量赋值中考虑字符串格式?
【发布时间】:2015-10-13 05:35:37
【问题描述】:

我正在解析文本以检查是否存在,例如:

u'Your new contact email thedude@gmail.com has been confirmed.'

...电子邮件地址两侧的文本将保持不变,电子邮件地址也不会保持不变,但会在解析之前知道。

假设句子包含在名为response 的变量中,电子邮件地址包含在address 中。我可以这样做:

'Your new contact email' + address + 'has been confirmed' in response

如果句子的文本发生变化,这有点不整洁,而且非常不方便。是否可以在变量赋值中利用字符串格式,例如

sentence = 'Your new contact email %s has been confirmed'

并在运行时以某种方式将地址传递给变量?

【问题讨论】:

  • 3 点赞???您在这里使用了完美的词:“字符串格式”。所以,你通过简单的谷歌搜索找不到任何相关的东西吗?可能是我忽略了什么。
  • @AshwiniChaudhary 我已经知道字符串格式以及它是如何使用的。那不是问题。我要做的是以某种方式设置一个字符串变量,以便允许在运行时将另一个字符串插入其中。这里的关键是我希望在一开始全局声明sentence,而不是在address 出现之后。

标签: python string variables string-formatting


【解决方案1】:

当然可以!试试这个...

sentence = 'Your new contact email {} has been confirmed'.format(address)

还有其他(相当老套的)替代方案...

sentence = 'Your new contact email %s has been confirmed' % address

这种替代方法也有其局限性,例如需要使用tuple 来传递多个参数...

sentence = 'Hi, %s! Your new contact email %s has been confirmed' % ('KemyLand', address)

编辑:根据 OP 的 cmets,如果格式字符串恰好在 address 之前存在,他询问如何执行此操作。实际上,这很简单。我可以给你看最后三个例子吗?...

# At this moment, `address` does not exist yet.

firstFormat = 'Your new contact email address {} has been confirmed'
secondFormat = 'Your new contact email address %s has been confirmed'
thirdFormat = 'Hi, %s! Your new contact email %s has been confirmed'

# Now, somehow, `address` does now exists.

firstSentence = firstFormat.format(address);
secondSentence = secondFormat % address
thirdSentence = thirdFormat % ('Pyderman', address)

我希望这对你有所启发!

【讨论】:

  • 谢谢,但问题是我希望在 address 存在之前声明变量 sentence。更像是一个常数,真的。
  • 另见我对 Ashwini 的澄清回复。
  • @Pyderman:你也可以这样做!我会更新我的答案给你看。
【解决方案2】:

这就是我通常对我的 SQL 查询、输出行和其他东西所做的事情:

sentence = 'Blah blah {0} blah'
...
if sentence.format(adress) in response:
    foo()
    bar()

所以基本上你可以将所有与 I/O 相关的字符串定义在一个地方,而不是在整个程序中硬编码。但是在同一个地方,您可以随时编辑它们,但只能以有限的方式进行(当参数太少或太多时,'foo'.format() 会引发异常)。

【讨论】:

    【解决方案3】:

    也许是一种黑客的做法,但如果我理解正确的话,你可以这样做..

    在开始时,声明字符串,但是地址应该放在哪里,放入一些通常不会重复的东西......比如||||| (5 个竖线字符)。

    然后当你有地址并想要弹出它时:

    myString.replace('|||||', address)
    

    这会将您的地址放在您需要的地方:)

    我的理解是您正在尝试创建一个字符串,然后再添加一个。抱歉,如果我误解了您 :)

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多