编码

默认情况下,Python 3源码文件以UTF-8编码,所有字符串都是unicode字符串。 当然也可以手动指定文件编码,有两种形式。

1
# -*- coding: <encoding-name> -*-

或者

1
# vim:fileencoding=<encoding-name>

注意: 编码声明必须位于文件第一行。如果非第一行的话,该行前面必须是注释。

如果找不到编码声明,则默认编码为UTF-8。此外,如果文件的第一个字节是utf-8字节顺序标记(b’\xef\xbb\xbf’),则声明的文件编码是utf-8(微软记事本也支持)。如果声明了编码,则必须由python识别编码名称。

例如,将编码声明为utf-8

1
# -*- coding: utf-8 -*-

例如,将编码声明为SJIS

1
# -*- coding: SJIS -*-

缩进

python最具特色的就是使用缩进来表示代码块,不需要像其他编程语言一样,使用大括号{}。使用空格或者tab键(制表符)来缩进。一般是用半角4个空格或一个tab键。

例如:

1
2
3
4
5
6
7
8
if True:
    print ("True")  # 使用了4个空格表示缩进
else:
    print ("False") # 使用了4个空格表示缩进
if True:
    print ("True")  # 使用了1个tab键
else:
    print ("False") # 使用了1个tab键

缩进的前导空格(空格和tab键)用于计算行的缩进级别。第一个非空白字符前面的空格总数确定了行的缩进量。

例如:

1
2
3
4
5
6
7
8
if True:
    print ("Outer True")      # 缩进级别1,p字符前面有4个空格
    if True:                  # 缩进级别1
        print ("Inner True")  # 缩进级别2,p字符前面有8个空格
    else:                     # 缩进级别1
        print ("Inner False") # 缩进级别2
else:
    print ("False")           # 缩进级别1

同一个代码块的语句必须包含相同的缩进数。否则会导致运行错误,抛出IndentationError异常:

例如:

1
2
3
4
5
if True:
    print ("True")
else:
    print ("False")
 print("the end")  # 缩进不一致,报错

以上程序由于缩进不一致,执行后会出现类似以下错误:

1
2
3
4
  File "main.py", line 5
    print("the end")  # 缩进不一致,报错
                            ^
IndentationError: unindent does not match any outer indentation level

缩进不能混用空格和tab键,两者选择其一。否则会引起TabError异常。

例如:

1
2
3
4
5
if True:
    print("True")  # print前面有一个tab和一个空格
else:
    print("False") # print前面有一个tab和一个空格
print("the end")

标识符

python中标识符的语法基于Unicode标准附件UAX-31,其规则如下:

  • 在ASCII范围内(U+0001..U+007F),第一个字符必须是字母表中字母或下划线_,不能以数字开头。
  • 标识符的其他的部分由字母、数字和下划线组成。

例如:

1
2
3
4
5
abc = "test" # 合法
_abc = 1     # 合法

1abc = "test" # 非法 数字开头
@abc = 1      # 非法 @开头
  • Python 3.0引入了ASCII范围之外的其他字符(请参见pep 3131)。对于这些字符,使用unicodedata模块中包含的unicode字符数据库版本。例如以下的也是合法的标识符。

例如:

1
2
3
中国 = "China"              # 合法 可识别的Unicode
百度网站 = "www.baidu.com"  # 合法 可识别的Unicode
0中国 = "China"             # 非法 数字0-9开头的。
  • Python标识符长度不受限制,大小写敏感。

例如,下例中的A和a是不同的标识符。

1
2
3
4
a  = "小写a"
A  = "大写A"
print(a)  # 打印 小写a
print(A)  # 打印 大写A

保留字(关键字)

以下标识符是Python语言的保留字(也叫关键字),不能用作标识符。它们的拼写必须与此处所写的完全一致(注意大小写):

- - 一览表 - -
False await else import pass
None break except in raise
True class finally is return
and continue for lambda try
as def from nonlocal while
assert del global not with
async elif if or yield

用作标识符时,会报语法错误,抛出SyntaxError异常。

例如:

1
2
3
4
5
>>> None=1
  File "main.py", line 1
    None = 1
    ^
SyntaxError: can't assign to keyword

其实,以上的保留字是由Python的标准库keyword模块来提供的。keyword模块可以输出当前Python版本的所有保留字(关键字):

1
2
3
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

注释

注释是为了说明程序的逻辑,运行程序时,注释将被忽略。注释分为单行注释和多行注释。

单行注释

单行注释以#开头,后面是注释内容。

例如:

1
2
3
4
5
6
7
abc = "test" # 这是一个字符串变量

# 这是一个数字变量
num = 10

# 后面可以是任何字符。包括#,'''和"""。
abc = "test" # 这是一个字符串变量 注释字符\#'''"""

多行注释

多行注释可以用多个#号,也可以用三个单引号或双引号”‘和”““。 单引号或双引号必须成对出现。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 注释1
# 注释2
# 注释3

'''
注释4
注释5
'''

"""
注释6
注释7
"""

”‘注释可以跨越多行,后面可以包含空行和”““。

例如:

1
2
3
4
5
6
7
'''
第一行注释
第二行注释
"""

最后一行注释
'''

”““注释也可以跨越多行,后面可以包含空行和”‘。

例如:

1
2
3
4
5
6
7
8
"""
第一行注释
第二行注释
'''

最后一行注释
"""
print(text)

表达式

表达式(expression)是可以求出某个值的语法单元。 换句话说,一个表达式就是表达元素例如字面值、名称、属性访问、运算符或函数调用的汇总,它们最终都会返回一个值。 与许多其他语言不同,并非所有语言构件都是表达式。 还存在不能被用作表达式的语句(statement),例如 while。 赋值也是属于语句而非表达式。

语句

语句(statement)是程序段(一个代码“块”)的组成单位。一条语句可以是一个表达式(expression)或某个带有关键字的结构,例如 if、while 或 for。

语句包含表达式,表达式肯定是语句,语句不一定是表达式。

多行语句

Python语句可以跨越多行,Python有以下两种方式来写多行语句。

  • 使用反斜杠\来实现多行语句。\后面不能再有其他字符。

例如:

1
2
3
a = 5 + 3 + \
    2 + 3
print(a)  # 没有语法错误,输出结果13
  • 在[], {}, 或()中的多行语句,不需要使用反斜杠\。

例如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
a = [5 + 3 +
         2 + 3]

b = {'a':1,'b':2,
'c':3}

c = (1,2
,3)

print(a)
print(b)
print(c)

执行以上程序会输出如下结果:

1
2
3
[13]
{'a': 1, 'b': 2, 'c': 3}
(1, 2, 3)

注意: b是字典,字典是无序的,可能你的输出结果不是{'a': 1, 'b': 2, 'c': 3},有可能是{'b': 2, 'a': 1, 'c': 3},或者{'c': 3,'a': 1, 'b': 2,}等等。


参考资料:
https://docs.python.org/3/reference/lexical_analysis.html

转载请注明本网址。