| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python的词法结构(行、注释、文件编码、标识符、关键字和字面值) -> 正文阅读 |
|
[Python知识库]python的词法结构(行、注释、文件编码、标识符、关键字和字面值) |
python3.6版本 1、行结构1.1 物理行python的物理行以一个行终止符为界限。在源文件中或者字符串中,支持使用任何标准平台上的行终止序列——Unix的LF(换行)或者Windows下的CRLF(回车加换行)或者一些老的机器上的CR(回车)。 如果在C中通过python的API来调用python,那么传给python API的source code字符串必须使用明确的\n来表示一行的结束。 1.2 逻辑行python的逻辑行按照概念上来说,逻辑行以NEWLINE表示的。除了compound statments(符合语句),其它的语句都不能跨越逻辑行。 实际上来说,逻辑行由一行或多行物理行组成,组成方式有两种:显示与隐式。 显示方式:通过反斜杠(\)来将多个物理行联结成一个逻辑行。
隐士方式:这种方式往往出现在一些使用圆括号,方括号或者大括号的表达式中。
在逻辑行中,还可以穿插注释,这是非常有用的。 1.3 空白行仅包含空格,tabs,formfeed(换行符,退纸符等),注释的行,这些行被词法检查的时候不会生成一个NEWLINE token。 PS:python在词法检查阶段,对于空白行会直接忽略,不会生成有关的tokens。 1.4?注释python的注释实际上只有一种,那就是单行注释: # 这是注释内容 其它的:这是需要注意的,下面不是注释。
1.5 编码声明编码声明直接影响python解释器以何种编码来解释python脚本文件,如果python脚本文件使用的编码python不能识别,那么就会出错。 在python脚本的开头以一行注释来表明当前脚本文件所使用的编码,必须符合正则表达式coding[=:]\s*([-\w.]+): # -*- coding: <encoding-name> -*- 或者 # vim:fileencoding=<encoding-name> 当然,使用更多是第一种: # -*- coding: utf-8 -*- python3.6中,如果没有声明编码,则python默认以UTF-8来解释python脚本文件。 小结:最好在python的开头写上一行# -*- coding: utf-8 -*- 1.6 缩进python通过缩进来确定语句块,处于同一缩进等级中的语句属于同一个语句块。
小结:不要混用tab和空格,PEB8编码标准建议,python的缩进采用4个空格。 1.7 空白符出了逻辑行的开头或者字符串中,其他任意tokens之间的空白如空格,tab,以及formfeed(退纸符,换行符)都被认为是分隔符,用来分隔不同的tokens。 2 、标识符和关键字(identifier、keywords)2.1 标识符所有的标识符都会被转换为NFKC的unicode形式。 python3的标识符可以使用unicode字符,所以使用一些其他语言的符号以及中文都是可以作为标识符的。 具体的标准,可以查看python的标准文档。 为了简单,直接认为以下划线或者大小写英文字母开头,后面跟上下划线、大小写英文字母和0-9这些字符。例如_test,test,_test_1。 关键字不能作为标识符,否则报错。 被保留的一些特殊的标识符不要作为标识符。 2.2 关键字False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise 2.3 被保留的特殊的标识符_*:以下划线开头的标识符,不能通过from module import * 载入。交互模式下,_下划线被用来保存上一条计算结果。 __*__:被双下划线包括的标识符,这是系统定义的一些名字。 __*:类的私有属性名字。 这些特殊的标识符最好不要使用,避免引起一些错误。 小结:
3、字面值(literal)python中的字面值主要表示一些内置类型的常量。 3.1 字符串stringliteral ::= [stringprefix](shortstring | longstring) stringprefix ::= "r" | "u" | "R" | "U" | "f" | "F" | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF" shortstring ::= "'" shortstringitem* "'" | '"' shortstringitem* '"' longstring ::= "'''" longstringitem* "'''" | '"""' longstringitem* '"""' shortstringitem ::= shortstringchar | stringescapeseq longstringitem ::= longstringchar | stringescapeseq shortstringchar ::= <any source character except "\" or newline or the quote> longstringchar ::= <any source character except "\"> stringescapeseq ::= "\" <any source character> 字符串分为短字符串和长字符串。 短字符串由单引号或者双引号包围,如:‘这是一个字符串’或者"这是一个字符串"。
长字符串由三个单引号或者三个双引号包围。
长字符串与段字符串的一个最大区别就在于,长字符串可以跨越多个逻辑行,也就是说,长字符串实际上相当于一个多行字符串。 字符串中可以使用转义序列来表示一个字符。
另外,不管是短字符串还是长字符串,都可以包含一个可选的字符串前缀。
最后,在定义一个字符串的时候,相邻的字符串会被python自动的组合为一个字符串。 例如:
3.1.2 格式化字符串字面值
小结:
3.2 字节串bytesliteral ::= bytesprefix(shortbytes | longbytes) bytesprefix ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB" shortbytes ::= "'" shortbytesitem* "'" | '"' shortbytesitem* '"' longbytes ::= "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""' shortbytesitem ::= shortbyteschar | bytesescapeseq longbytesitem ::= longbyteschar | bytesescapeseq shortbyteschar ::= <any ASCII character except "\" or newline or the quote> longbyteschar ::= <any ASCII character except "\"> bytesescapeseq ::= "\" <any ASCII character> 字节串也分为两种:短字节串和长字节串。 短字节串采用单引号或者双引号包围。 长字节串采用三个单引号或者三个双引号包围。 与字符串不同的是: 字节串必须以b或者B前缀开头。 字节串只能包含ASCII字符。 ?字节对应的数值超过128及以上需要使用转义形式。 其他的地方: 字节串还可以使用r或者R前缀,表示这是原始的字节串,这种情况下,转义序列不会被转义。可以与b或B组合使用。
3.3?整数python允许4种类型的整数字面值:十进制、二进制、八进制、十六进制。
3.3.1 十进制 decinteger ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")* 十进制以非零的数字开头,后面跟上跟上十进制数字以及可选的下划线分组。或者以1个或多个0开头,后面跟上一连串的0以及可选的下划线分组。
3.3.2 二进制? bininteger ::= "0" ("b" | "B") (["_"] bindigit)+ 二进制以0b或者0B开头,后面跟上二进制数字以及可选的下划线分组。
3.3.3 八进制? octinteger ::= "0" ("o" | "O") (["_"] octdigit)+ 八进制以0o或者0O开头,后面跟上八进制数字以及可选的下划线分组。
3.3.4 十六进制? hexinteger ::= "0" ("x" | "X") (["_"] hexdigit)+ 十六进制以0x或0X开头,后面跟上十六进制数字以及可选的下划线分组。
3.4 浮点数浮点数其实有两种类型:普通小数的浮点数和指数形式的浮点数。 普通小数形式 pointfloat ? ?::= ?[digitpart] "." digitpart | digitpart "." 这种形式的浮点数的一种形式:整数部分是可选的,而且整数部分包含可选的下划线分组。整数部分后面跟上一个小数点,后面实现小数部分。数字可以使用10进制数字。
指数形式的浮点数 exponentfloat ::= ?(digitpart | pointfloat) exponent exponent ? ? ?::= ?("e" | "E") ["+" | "-"] digitpart 这种形式的浮点数就是由普通小数形式或者整数作为底数加上指数部分组成的。数字可以使用十进制数字。
3.5 虚数imagnumber ::= ?(floatnumber | digitpart) ("j" | "J") 虚数由浮点数或者十进制整数后面跟上一个j或者J组成。一个虚数可以看作是一个实部为0的复数。
4、符号4.1 运算符 + - * **(指数运算符) /(除法) //(向下取整) %(取余) @(矩阵乘法) << >> & | ^ ~(按位取反) < > <= >= == != 4.2 分隔符 ( ) [ ] { } , : . ; @ = ->(函数的返回类型注释符) += -= *= /= //= %= @= &= |= ^= >>= <<= **= 这里的赋值运算符号,既可以算运算符,也可以算分隔符。为了方便,将它们放在了分隔符中。 一些其他的符号,例如单引号、双引号、#和\都是python的标记符号。 另外的一些符号,$,?,`等,这些符号只能出现在字符串和注释中,出现在其他地方将非法。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 16:53:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |