在学习到python字符串格式化符的时候想必很多小伙伴都会接触到%r和%s这两个格式化
那么它们分别有什么区别和联系呢?
%s是格式化字符串
%r是给对象加上引号’’
举个例子
print(type('%r'%5))
print(type('%s'%5))
#它们的输出都是<class 'str'>
所以如果作用的对象本身不是字符串的话,那么是没有区别的,但是!
b='nihao'
print('%r'%b)
print('%s'%b)
'''
它们的输出结果如下
'nihao'
nihao
'''
看到这里我们就知道它们的区别在哪了吧
eval和print
我们再来看看%r和%s在eval上的不同
eval('%r'%b)
#输出'nihao'
eval('%s'%b)
#报错,nihao没有定义
报错是怎么回事呢?
其实eval的输出机制是给对象去掉双引号,所以自然去掉双引号的b就成了一个未定义的变量而报错了
对于print和eval的区别想必通过上面的例子大家也可以很清晰地知道了