鱼C论坛

 找回密码
 立即注册
查看: 3425|回复: 10

关于反斜杠\

[复制链接]
发表于 2022-11-22 14:18:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
微信截图_20221122141644.png

红色部分不理解:为何本来赋值时是一个反斜杠\,显示str的值时变成两个反斜杠\\

请大神给与指点迷津,不甚感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-22 14:27:11 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2022-11-22 14:29 编辑
'c:\now'
这个你看中间的 '\n',他是一个转义字符,被解释为换行符,当你用 print 打印出来时:
c:
ow

下一个:
'c:\how'
因为 '\h' 不成转义字符,所以解释器只能把你将 \ 作为普通字符,但是 \ 在单独出现的情况为转义, 两个一起出现才表示一个 \,因此,显示的字符串为:
'c:\\how'
但是你打印就没有问题了:
c:\how
转义字符这一方面有点深奥,其他的转义可以去参考参考网上的内容

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2022-12-10 20:23
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-11-22 14:27:31 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-22 14:42 编辑

       反斜杠 '\' 是转义字符,字符串中一旦出现这个字符,那就是一个信号,说明接下来的字符需要和反斜杠字符一起,表达另外一个不可表达(不能直接写出来)字符,例如:换行符 '\n'、回车符 '\r',tab 字符 '\t' 等等,如果字符串中需要出现 '\' 字符本身怎么办呢?答案是 '\\',所以,'\' 用 '\\' 表达是为了满足人机交互的需要,当输入 '\\'  的时候,Python 就知道你想输入的是 '\' 而并非真的就是 '\'。
       而 IDLE 显示 '\\' 也是因为 IDLE 是一个解释环境,当你输入一个变量或者表达式的时候,系统会以人能看得懂的方式告诉你变量或表达式的值,同样是为了满足人机交互的需要。
       当然,上面所说的情况只限于编写代码,当需要使用 input() 输入字符串的时候,面向的是普通用户,而普通用户不需要知道什么转义字符,所以,键盘输入了什么,就直接是什么,不存在转义字符一说了。也就是说,无需把 'C:\Windows\System32\Notepad.exe' 写成 'C:\\Windows\\System32\\Notepad.exe'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-22 16:26:36 | 显示全部楼层
jackz007 发表于 2022-11-22 14:27
反斜杠 '\' 是转义字符,字符串中一旦出现这个字符,那就是一个信号,说明接下来的字符需要和反斜杠 ...

前半段懂了,后半段即:

而 IDLE 显示 '\\' 也是因为 IDLE 是一个解释环境,当你输入一个变量或者表达式的时候,系统会以人能看得懂的方式告诉你变量或表达式的值,同样是为了满足人机交互的需要。

这段没看懂

>>> str = 'c:\how'
>>> str
'c:\\how'   # 不理解!
>>> print(str)
c:\how     # 理解!
>>> str = 'c:\\how'
>>> str
'c:\\how'   # 不理解!
>>> print(str)
c:\how     # 理解!
>>> str = 'c:\\\how'
>>> str
'c:\\\\how'    # 不理解!
>>> print(str)
c:\\how      # 理解!
>>> str = 'c:\\\\how'
>>> str
'c:\\\\how'    # 不理解!
>>> print(str)
c:\\how       # 理解!
>>> str = 'c:\\\\\how'
>>> str
'c:\\\\\\how'    # 不理解!
>>> print(str)
c:\\\how    # 理解!
>>> str = 'c:\\\\\\how'
>>> str
'c:\\\\\\how'    # 不理解!
>>> print(str)
c:\\\how     # 理解!

上面的测试中,好像当赋值时\个数为奇数时,变量str显示的值里的\数量总是+1,当赋值时\个数为偶数时,变量str显示的值里的\数量不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-22 16:33:47 | 显示全部楼层
反斜杠加n是换行的标志
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-22 16:41:28 From FishC Mobile | 显示全部楼层
lzb1001 发表于 2022-11-22 16:26
前半段懂了,后半段即:

而 IDLE 显示 '\\' 也是因为 IDLE 是一个解释环境,当你输入一个变量或者表 ...

        IDLE 总是会把一个 '\' 显示成 '\\',这一点和使用 print() 函数打印的结果有所区别,print() 会把 '\' 打印成 '\' 而不是 '\\'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-22 18:26:52 | 显示全部楼层
lzb1001 发表于 2022-11-22 16:26
前半段懂了,后半段即:

而 IDLE 显示 '\\' 也是因为 IDLE 是一个解释环境,当你输入一个变量或者表 ...

纠结于那些细节干啥呢? 还没到你研究背后具体机制的时候。  

你只需要知道有 反斜杠 和 "转义字符"  ,这个概念 及其影响(要么转义,要么不转义),即可

其次,print(str)打印出来的 和 str里实际存储的字符值,是不同的呀!
—— 不要被表象所迷惑了,还根据表象瞎推测。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-23 00:03:40 From FishC Mobile | 显示全部楼层
lzb1001 发表于 2022-11-22 16:26
前半段懂了,后半段即:

而 IDLE 显示 '\\' 也是因为 IDLE 是一个解释环境,当你输入一个变量或者表 ...

其实原因在于,当\个数为奇数个的时候,编译器会先看最后一个反斜杠能否和后面的字符组成合法的转义序列(就是有没有意义,比如\n代表换行),如果不是合法的转义序列,比如楼主输入的\h,没有任何意义,python就会把反斜杠和后面的h分开处理,当做\和h两个字符。所以直接用字符串形式输出的时候,如果反斜杠是奇数个,因为h前面的这个\没法跟h组合,所以这个\会被计算机当做一个单独的\,于是计算机就会自动在这个\前加上一个\作为转义字符。在打印的时候,最后的这个\也就被作为一个单独的\打印出来。

不过在3.6及以后的python版本里,如果是奇数个\,并且最后面的\没法与后面的字符组成合法转义序列的话,就会报语法错误Syntax Error。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-23 23:55:54 | 显示全部楼层
本帖最后由 lzb1001 于 2022-11-24 09:46 编辑
三个晾衣架 发表于 2022-11-23 00:03
其实原因在于,当\个数为奇数个的时候,编译器会先看最后一个反斜杠能否和后面的字符组成合法的转义序列 ...


感谢解答

1、不过我的版本是3.7.6,并没有返回语法错误的提示(见下图),不知道怎么回事

微信截图_20221123235409.png


2、下面的例子套用你的解释来解答:……直接用字符串形式输出的时候,如果反斜杠是奇数个,因为h前面的这个\没法跟h组合,所以这个\会被计算机当做一个单独的\,于是计算机就会自动在这个\前加上一个\作为转义字符。
>>> str = 'c:\\\\\how'
>>> str
'c:\\\\\\how'  # 红色字体即第五个\就是计算机自动在h前面那个\前加上的\吗?

3、下面的例子是不是可以这样理解:c:\\\\\how字符串中第2、4个\分别被转义,加上第5个未被转义的\,所以返回的结果是3个\???
>>> print(str)
c:\\\how
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-24 09:46:41 | 显示全部楼层
lzb1001 发表于 2022-11-23 23:55
感谢解答

1、不过我的版本是3.7.6,并没有返回语法错误的提示(见下图),不知道怎么回事

哦哦,可能是我用的Pycharm,和IDLE不太一样。第2和第3个的理解是没问题的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表