当前位置:首页 > 科技  > 软件

聊一聊 Python 的换行以及转义

来源: 责编: 时间:2023-11-02 09:08:54 390观看
导读Python 里面可以通过换行来标识一行语句的结束,当你在一行的末尾敲击 Enter 键时,便可开始新的一行语句。name = "高老师"print(name) # 高老师这段代码很简单,因为 name = "高老师" 后面已经没有内容了,是一个换行,那么

Python 里面可以通过换行来标识一行语句的结束,当你在一行的末尾敲击 Enter 键时,便可开始新的一行语句。rAS28资讯网——每日最新资讯28at.com

name = "高老师"print(name)  # 高老师

这段代码很简单,因为 name = "高老师" 后面已经没有内容了,是一个换行,那么就代表这个语句结束了。但是在 Python 中我们还可以指定分号,表示该语句结束了。rAS28资讯网——每日最新资讯28at.com

name = "高老师"; print(name); age = 18; print(age)"""高老师18"""

可以看到当我们在 name = "高老师" 后面指定了分号之后,就代表该语句结束了。但是 Python 的语法解析并不会直接跳到下一行,而是继续向后寻找,即便当中出现了空格。rAS28资讯网——每日最新资讯28at.com

由于都在一行,所以解释器会找到 print(name),然后继续向后寻找。尽管这么做是可以的,但不推荐这种写法,这种写法纯属在恶作剧,当然我们这里演示就不算了。rAS28资讯网——每日最新资讯28at.com

再比如 if 语句,有时候会出现写在一行的情况。rAS28资讯网——每日最新资讯28at.com

a = 123if a > 100: print("a > 100"); print("两个 print 具有相同的缩进")"""a > 100两个 print 具有相同的缩进"""

如果 if 语句写在了一行,那么语句块的代码就应该只有一句,像我们这里的两个 print 就不应该写在同一行。并且这两个 print 的缩进层级是一样的,即:rAS28资讯网——每日最新资讯28at.com

a = 123if a > 100: print("a > 100"); print("两个 print 具有相同的缩进")# 等价于if a > 100:    print("a > 100")    print("两个 print 具有相同的缩进")

关于 Python 中的语句,根据交互式界面的表现形式我们可以分为两种:rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

我们看到当输入 num = 123 按下回车的时候,下一行的开始出现的是 >>>,这表示上一行语句已经结束了。但是当输入 if num > 100: 按下回车的时候,下一行出现的是 ...,这表示这行语句还没有结束。rAS28资讯网——每日最新资讯28at.com

像 if xx:,for xx:,while xx:,def xx():,class xx: 等等这样带有 : 的语句,一般是需要多行来表达的,一旦按下回车,就意味着下面肯定还有内容,而且还会带有缩进,在交互式界面中就会出现 ...。而这样的语句我们在一行中只能出现一次,比如:rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

这样写是无法通过语法检测的,因为当中出现了两个 :,我们说这样的语句一行只能出现一次。当然肯定也不会有人这么做,所以这些知道就好。rAS28资讯网——每日最新资讯28at.com

说完了换行,我们再来聊一聊反斜杠。rAS28资讯网——每日最新资讯28at.com

如果一行代码比较长,我们需要分开多行来写该怎么办呢?答案是使用反斜杠 /,反斜杠在 Python 中表示转义。rAS28资讯网——每日最新资讯28at.com

a = /    123456# / 表示转义,意思就是使后面的换行符失去效果# 这样 Python 就不会认为这条语句结束了# 因为 123456 前面还有一些空格,因此等价于 a =     123456a = /123456# 这行代码就等价于 a = 123456 了

再比如字符串:rAS28资讯网——每日最新资讯28at.com

s = "这是一段很"   "长的字符串"  "具体有多长我也不知道"print(s)  # 这是一段很长的字符串具体有多长我也不知道

Python 的字符串比较特别的是,不需要显式的使用加号。如果使用了加号,像这段代码就会先创建 3 个字符串,然后再拼接在一起。如果不使用加号,那么 Python 在语法解析的时候就会知道这是一个字符串,只不过分开写了。rAS28资讯网——每日最新资讯28at.com

s = "这是一段很" /    "长的字符串" /    "具体有多长我也不知道"

当然我们也可以分开写,但是要使用 / 将换行符转义掉。但是下面的做法则不行:rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

如果把 / 改成 + 号就不行了,这个在 Go 里面可以,但是不同语言的语法检测不一样。因为 + 后面没有内容了,直接换行语句结束,那么这是无法通过语法检测的,所以 + 后面出现了红色波浪线。rAS28资讯网——每日最新资讯28at.com

而且我们看到第三行字符串两边也出现了红色波浪线,这是缩进不对造成的,因为上面的语句已经结束,所以这是一条单独的语句,应该靠左对齐。这里显然没有对齐,而是出现了缩进。rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

这样写是可以的,此时就等价于"这是一段很长的字符串" + "具体有多长我也不知道"。rAS28资讯网——每日最新资讯28at.com

但是还有一个特殊情况,那就是出现了括号。rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

这样写也是没有问题的,因为 Python 在检测代码的时候发现了小括号的左半部分,那么即便出现了换行,Python 也不会认为语句结束了。只有当再找到小括号的右半部分,Python 才会认为语句结束,所以此时我们是不需要 / 的。rAS28资讯网——每日最新资讯28at.com

再来看几个需要动点脑筋的:rAS28资讯网——每日最新资讯28at.com

s = "这是一段很""长的字符串""具体有多长我也不知道"print(s)# 会打印什么呢?

只会打印这是一段很,因为遇到换行符语句结束了,下面两行只是创建两个字符串对象,而且还没有赋值,因此创建完之后就被销毁了。rAS28资讯网——每日最新资讯28at.com

s = "这是一段很" /    "长的字符串"; /    "具体有多长我也不知道"print(s)# 会打印什么呢?注意第二行出现了;

会打印这是一段很长的字符串,因为我们手动指定了 ;,表示结束这段语句。后面出现的"具体有多长我也不知道"也是只创建了一个字符串对象,没有赋值,创建完毕直接销毁。rAS28资讯网——每日最新资讯28at.com

因此上面的代码就等价于:rAS28资讯网——每日最新资讯28at.com

s = "这是一段很长的字符串"; "具体有多长我也不知道"# 或者等价于s = "这是一段很长的字符串""具体有多长我也不知道"

要是我们将第二行结尾的 / 给去掉,会怎么样?rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

可以看到如果把第二行的 / 去掉了,这里又出现了红色波浪线,这个问题我们上面说过了。因为第二行出现了 ;,那么第三行就是单独的语句,所以应该要靠在左边。rAS28资讯网——每日最新资讯28at.com

图片图片rAS28资讯网——每日最新资讯28at.com

这样写是没问题的,但第三行还是如我们之前所说,只是创建了一个字符串对象。rAS28资讯网——每日最新资讯28at.com

Python 的转义

Python 的转义也是一个老生常谈的问题了,它是通过反斜杠来实现的。但 / 有两个作用:rAS28资讯网——每日最新资讯28at.com

  • 和一些特定的字符组合,从而具备特殊意义(/n, /t, /r 等等)
  • 使 Python 的一些本来就具有特殊意义的字符失去其意义。
s = "my name is /nVan"print(s)"""my name is Van"""s = "my name is /"Van"print(s)"""my name is "Van"""

我们看到 / 和字符 n 组合,整体形成了换行。而 / 和 " 组合则并不是变成新的什么东西,而是使 " 失去其本来的意义。因为遇到 " 表示字符串结束了,但是前面出现了 /,使得 " 失去了其具有的意义,遇到下一个 " 才表示字符串结束。而中间那个 " 则是正常输出了出来,但是 / 却不见了,因为 / 和 组合就等于 "rAS28资讯网——每日最新资讯28at.com

说到这儿,再补充一下 Python 字符串的几种表示方式:rAS28资讯网——每日最新资讯28at.com

print(hex(97), hex(98), hex(99))"""0x61 0x62 0x63"""# 在字符串中,每个字符还可以使用 /x 加两个 16 进制数字表示print("/x61/x62/x63")"""abc"""# 或者使用 / 加上三个 8 进制数字表示print(oct(97), oct(98), oct(99))"""0o141 0o142 0o143"""print("/141/142/143")"""abc"""# 不过上面只能表示 ASCII 字符串,因为一个汉字占三个字节# 所以当包含一个字节无法表示的字符时,解析就会出现乱码print("/xe9/xab/x98/xe8/x80/x81/xe5/xb8/x88")"""高老师"""print(b"/xe9/xab/x98/xe8/x80/x81/xe5/xb8/x88".decode("utf-8"))"""高老师"""

当然,在 Python 里面每个字符还可以使用 /u 或者 /U 来表示。rAS28资讯网——每日最新资讯28at.com

# /u 表示 unicode,后面跟 4 个十六进制数表示的 unicode 码点print(hex(97), hex(98), hex(99))"""0x61 0x62 0x63"""print("/u0061 /u0062 /u0063")"""a b c"""print(ord("高"), ord("老"), ord("师"))"""39640 32769 24072"""print(hex(39640), hex(32769), hex(24072))"""0x9ad8 0x8001 0x5e08"""print("/u9ad8 /u8001 /u5e08")"""高 老 师"""# 如果是 emoji,它的码点超出了 FFFF# 此时 4 个 16 进制数无法表示,因此需要 8 个十六进制数print(hex(ord(" 
                

本文链接:http://www.28at.com/showinfo-26-16510-0.html聊一聊 Python 的换行以及转义

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go etcd 的依赖问题终于解决了......

下一篇: C++使用Lambda表达式实例讲解

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克·扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:“不仅
Top