【一日一技】揭秘字符串的两副“面孔”

如果你经常在python的命令行交互环境中工作,你可能会注意到以下现象:

a = ‘test’

a

‘test’

print(a)

test

首先,我们定义了一个变量a,值为字符串’test’。

当你直接在命令行输入变量名a并回车时,显示的结果是’test’,而使用print(a)时,显示的结果则是test。

直接输入变量名并回车,字符串会被单引号包围。而使用print函数打印变量时,字符串则不带引号。

【一日一技】揭秘字符串的两副“面孔”虽然引号看起来只是一个小问题,但让我们看看反斜杠的情况:

b = ‘D:gamepal4’

b

‘D:gamepal4’

print(b)

D:gamepal4

这里,变量b的值是一个Windows路径。在定义时,我使用的是单个反斜杠。

当我直接输入变量名b并回车时,结果是’D:gamepal4’,不仅有最外层的引号,而且反斜杠变成了双反斜杠。

但当我使用print函数打印时,一切又恢复正常。

【一日一技】揭秘字符串的两副“面孔”这看起来很奇怪,对吗?

实际上,直接输入变量名并回车时,你看到的是字符串在Python中的真实样子,因为在Python中不存在单个反斜杠。要表示反斜杠本身,必须使用这种形式。

当然,在定义时你可以只写单个反斜杠,Python通常会理解你的意图,并自动将单个反斜杠转换为双反斜杠。

而使用print函数打印出来的,是Python优化后更易于人类阅读的形式。

当然,通过修改print函数,你也可以看到字符串的真实样子:

b = ‘D:gamepal4’

b

‘D:gamepal4’

print(repr(b))

‘D:gamepal4’

当你使用repr函数处理字符串后再打印时,效果与直接输入变量名并回车相同。

在Python中,repr(对象)本质上是调用了对象的repr方法。而直接print(对象)时,打印的是对象的str方法返回的内容。

【一日一技】揭秘字符串的两副“面孔”让我们做一个实验:

class Test:    def __repr__(self):        return 'hello world!'    def __str__(self):        return '为什么我总是对你说你好,因为你是我的世界啊,傻瓜'you = Test()

动手测试一下,输入you然后直接回车显示的是什么内容。输入print(you)显示的又是什么内容。

青柚面试 青柚面试

简单好用的日语面试辅助工具

青柚面试 57 查看详情 青柚面试

【一日一技】揭秘字符串的两副“面孔”【一日一技】揭秘字符串的两副“面孔” 运行效果图

从上面的例子可以看出,直接输入变量名回车和直接使用print函数打印调用的是对象的不同方法。所以它们当然可以不同。

【一日一技】揭秘字符串的两副“面孔”回到昨天的问题,在PyCharm的调试模式中,你看到的内容实际上是变量对象的repr方法返回的内容,这里显示的是字符串在Python中的真实样子,因此斜杠会变多。

前面提到,当你输入Windows路径时,Python通常能理解你的意图,将单个反斜杠转换为双反斜杠。不过也有例外情况。

例如:

假设有一个名为u6211的文件夹,它位于pal4文件夹中。

那么,路径应该是:D:gamepal4u6211

如果在Python中执行,会出现什么问题?

c = ‘D:gamepal4u6211’

c

‘D:gamepal4我’

print(c)

D:gamepal4我

为什么u6211和前面的pal4拼在一起了?

因为u6211是一个Unicode编码,表示中文字符“我”。

在这种情况下,你有两种解决方法

【一日一技】揭秘字符串的两副“面孔”1. 手动使用双反斜杠:

b = ‘D:gamepal4u6211’

b

‘D:gamepal4u6211’

print(b)

D:gamepal4u6211

【一日一技】揭秘字符串的两副“面孔”2. 在定义变量时,在字符串左侧引号前加上字母r:

b = r’D:gamepal4u6211′

b

‘D:gamepal4u6211’

print(b)

D:gamepal4u6211

以上就是【一日一技】揭秘字符串的两副“面孔”的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/396214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 17:44:21
下一篇 2025年11月6日 17:45:38

相关推荐

发表回复

登录后才能评论
关注微信