Python语法分析

内容摘自python官方文档

2.1.1. 逻辑行

NEWLINE 形符表示结束逻辑行。语句不能超出逻辑行的边界,除非句法支持 NEWLINE (例如,复合语句中的多行子语句)。根据显式或隐式 行拼接 规则,一个或多个 物理行 可组成逻辑行。

2.1.2. 物理行

物理行是一序列字符,由行尾序列终止。源文件和字符串可使用任意标准平台行终止序列 - Unix ASCII 字符 LF (换行)、 Windows ASCII 字符序列 CR LF (回车换行)、或老式 Macintosh ASCII 字符 CR (回车)。不管在哪个平台,这些形式均可等价使用。输入结束也可以用作最终物理行的隐式终止符。

嵌入 Python 时,传入 Python API 的源码字符串应使用 C 标准惯例换行符(\n,代表 ASCII 字符 LF, 行终止符)。

每个物理行结尾的回车转换为\n

a="""
这是第二行
这是第三行"""
a   #>>'\n这是第二行\n这是第三行'
2.1.5. 显式拼接行

两个及两个以上的物理行可用反斜杠(\)拼接为一个逻辑行,规则如下:以不在字符串或注释内的反斜杠结尾时,物理行将与下一行拼接成一个逻辑行,并删除反斜杠及其后的换行符。例如:

if 1900 < year < 2100 and 1 <= month <= 12 \
   and 1 <= day <= 31 and 0 <= hour < 24 \
   and 0 <= minute < 60 and 0 <= second < 60:   # Looks like a valid date
        return 1

# 删除反斜杠及其后的换行符
a="""\
这是第二行\
这是第三行"""
a    #>>'这是第二行这是第三行'

以反斜杠结尾的行,不能加注释;反斜杠也不能拼接注释。除字符串字面值外,反斜杠不能拼接形符(如,除字符串字面值外,不能用反斜杠把形符切分至两个物理行)。反斜杠只能在代码的字符串字面值里,在其他任何位置都是非法的。

2.1.6. 隐式拼接行

圆括号、方括号、花括号内的表达式可以分成多个物理行,不必使用反斜杠。例如:

month_names = ['Januari', 'Februari', 'Maart',      # These are the
               'April',   'Mei',      'Juni',       # Dutch names
               'Juli',    'Augustus', 'September',  # for the months
               'Oktober', 'November', 'December']   # of the year

隐式行拼接可含注释;后续行的缩进并不重要;还支持空的后续行。隐式拼接行之间没有 NEWLINE 形符。三引号字符串支持隐式拼接行(见下文),但不支持注释。

2.1.8. 缩进

逻辑行开头的空白符(空格符和制表符)用于计算该行的缩进层级,决定语句组块。
拼接的物理行缩进不影响其逻辑行的缩进层级

a=11
if  a > 10 or \
        a < 15:
    print(a)
原始字符串注意点:

即使在原始字面值中,引号也可以用反斜杠转义,但反斜杠会保留在输出结果里;尤其是,原始字面值不能以单个反斜杠结尾 (反斜杠会转义其后的引号)。

#例如 r"\"" 是由两个字符组成的有效字符串字面值:反斜杠和双引号;
#r"\" 则不是有效字符串字面值(原始字符串也不能以奇数个反斜杠结尾)。
print(r""")  #>>报错
print(r"\"") #>>\"   这里的\仍可以转义"但反斜杠会保留在输出结果中即算两个字符
print(r"\")  #>>报错  不能使用单个\结尾(反斜杠会转义其后的引号)

还要注意,反斜杠加换行在字面值中被解释为两个字符,而不是拼接行。

a=(r"\
这是第二行") 
a  #>>'\\\n这是第二行'
2.4.2. 字符串字面值合并

以空白符分隔的多个相邻字符串或字节串字面值,可用不同引号标注,等同于合并操作。因此,“hello” ‘world’ 等价于 “helloworld”。此功能不需要反斜杠,即可将长字符串分为多个物理行,还可以为不同部分的字符串添加注释,例如:

re.compile("[A-Za-z_]"       # letter or underscore
           "[A-Za-z0-9_]*"   # letter, digit or underscore
          )
# 字符串合并只需要加个括号即可
a=("第一行"
    "第二行"
    )
a    #>>'第一行第二行'

注意,此功能在句法层面定义,在编译时实现。在运行时,合并字符串表达式必须使用 ‘+’ 运算符。还要注意,字面值合并可以为每个部分应用不同的引号风格(甚至混用原始字符串和三引号字符串),格式字符串字面值也可以与纯字符串字面值合并。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值