如何在 Python 变量赋值中考虑字符串格式?
How to account for string formatting in Python variable assignment?
我正在解析文本以检查是否存在:
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'
并以某种方式在运行时将地址传递给变量?
当然可以!试试这个...
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)
Edit:根据 OP 的评论,他询问如果格式字符串恰好在 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)
我希望这对您有所启发!
也许是一种 hack 方式,但如果我对你的理解是正确的,那么你可以这样做..
开始时,声明字符串,但是在地址所在的地方,放入一些通常永远不会重复的东西...像||||| (5 个竖线字符)。
然后当你有地址并想弹出它时:
myString.replace('|||||', address)
这将把您的地址放在您需要的地方:)
我的理解是您正在尝试创建一个字符串,然后再添加一个片段。抱歉,如果我误解了您:)
这就是我通常对 SQL 查询、输出行和其他内容所做的事情:
sentence = 'Blah blah {0} blah'
...
if sentence.format(adress) in response:
foo()
bar()
所以基本上您可以将所有 I/O-related 字符串定义在一个地方,而不是在整个程序中进行硬编码。但是在同一个地方,您可以随时编辑它们,但只能以有限的方式进行编辑('foo'.format() 在参数太少或太多时抛出异常)。
我正在解析文本以检查是否存在:
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'
并以某种方式在运行时将地址传递给变量?
当然可以!试试这个...
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)
Edit:根据 OP 的评论,他询问如果格式字符串恰好在 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)
我希望这对您有所启发!
也许是一种 hack 方式,但如果我对你的理解是正确的,那么你可以这样做..
开始时,声明字符串,但是在地址所在的地方,放入一些通常永远不会重复的东西...像||||| (5 个竖线字符)。
然后当你有地址并想弹出它时:
myString.replace('|||||', address)
这将把您的地址放在您需要的地方:)
我的理解是您正在尝试创建一个字符串,然后再添加一个片段。抱歉,如果我误解了您:)
这就是我通常对 SQL 查询、输出行和其他内容所做的事情:
sentence = 'Blah blah {0} blah'
...
if sentence.format(adress) in response:
foo()
bar()
所以基本上您可以将所有 I/O-related 字符串定义在一个地方,而不是在整个程序中进行硬编码。但是在同一个地方,您可以随时编辑它们,但只能以有限的方式进行编辑('foo'.format() 在参数太少或太多时抛出异常)。