1. 了解格式化占位符%r和!r
在Python中,格式化字符串是一种用于在字符串中插入变量或包含其他数据的方法。使用该方法,可以通过将占位符替换为具体值来创建最终的字符串。在格式化字符串中,有两种特殊的占位符:%r和!r。
占位符%r是一种通用的占位符,它可以用于表示任意类型的对象。当使用%r时,Python会尝试使用可读性较好的方式来表示对象。例如,如果格式化一个数值,%r会返回该数值的字符串表示。如果格式化一个字符串,%r会返回该字符串的原始表示,包括引号和转义字符。
占位符!r则会强制使用对象的repr()方法对其进行格式化。repr()方法返回一个对对象的描述,通常是一个可以通过Python解释器来重新创建该对象的字符串。这在调试代码或打印一些特殊字符时非常有用。
2. 使用%r和!r进行格式化
2.1 使用%r进行格式化
下面是一个使用%r进行格式化的简单示例:
name = "Alice"
age = 25
print("My name is %r and I'm %r years old." % (name, age))
输出结果为:
My name is 'Alice' and I'm 25 years old.
在上面的例子中,使用%r来插入name和age变量的值。%r会返回字符串的原始表示(带有引号),从而在格式化后的字符串中保留了这些引号。
2.2 使用!r进行格式化
下面是一个使用!r进行格式化的示例:
import datetime
now = datetime.datetime.now()
print("Current time: {!r}".format(now))
输出结果为:
Current time: datetime.datetime(2021, 10, 10, 12, 0, 0)
在上面的例子中,使用!r来插入now变量的值。!r会强制使用datetime对象的repr()方法,返回对象的原始表示,包括类名和参数。
3. %r和!r的差异
使用%r和!r进行格式化的主要区别在于对于字符串的处理方式。%r会返回字符串的原始表示,包括引号和转义字符,而!r则会返回字符串的repr()形式,包括转义字符的转义形式。
下面是一个示例,用于说明%r和!r对于字符串的不同处理:
text = "Hello, world!\n"
print("Text with %r: %r" % (text, text))
print("Text with !r: {!r}".format(text))
输出结果为:
Text with 'Hello, world!\n': 'Hello, world!\n'
Text with !r: 'Hello, world!\n'
从上面的例子中可以看出,%r会返回字符串的原始表示,包括引号和转义字符。而!r则会返回字符串的repr()形式,即用引号括起来,并且将换行符表示为\n。
4. 总结
本文介绍了Python中的格式化占位符%r和!r。%r是通用的占位符,会使用可读性较好的方式来表示对象;!r则会强制使用repr()方法对对象进行格式化。%r和!r的主要区别在于对于字符串的处理方式,%r返回字符串的原始表示,包括引号和转义字符,而!r返回字符串的repr()形式,包括转义字符的转义形式。
在实际的编程中,根据具体的需求选择使用%r或!r进行格式化,可以让最终的字符串更符合预期,并提高代码的可读性。