Python 学习 第五篇:语句和语法
Python程序是语句构成的,语句包含表达式,表达式嵌套在语句中,包含变量和常量,用于处理对象。Python的语法实质上是由表达式、语句和代码块构成的。语句是由表达式构成的,代码块是由多个语句构成的复合语句。
代码块是具有一定格式的多个语句,在Python中,垂直对齐的语句是一个代码块,代码块以冒号:开始,以结束缩进为结束。典型的代码块如下所示:
if x >y :
print('x>y')
print(x-y)
else :
print('x<=y')
Python语法的特点是:
- 测试条件的两端不需要小括号,例如 if x<y 是完全正确的。
- 语句的终止不需要以分号结尾,一行的结束会自动终止该行的语句;
- 缩进的结束就是代码块的结束,Python以垂直对齐的方式来组织代码块;
- Python只能使用单行注释,#之后的文本作为注释内容。
- Python中的所有语句都是实时运行的,并没有独立的编译时间。
一,变量命名
变量是表达式的重要组成部分,Python程序离不开变量,变量是对象的引用,对象是存储数据的结构。
1,变量命名规则
- 变量名以 下划线或字母 开头,后面接任意数目的字符、数字或下划线;
- 变量名是区分大小写的,包括创建的变量名以及保留字;
- 自定义的变量名不能使用保留字。
2,命名惯例
- 以单一下划线开头的变量名(_x)不会被from module import * 语句导入;
- 前后有下划线的变量名是系统定义的变量名(__xx__),对解释器有特殊意义;
- 以双下划线开头,但结尾没有下划线的变量名(__xx)是类的本地变量;
- 通过交互模式运行时,只有单个下划线(_)的变量名会保存最后表达式的结果
二,Python的语法风格
Python的复合语句都是首行以:结尾,然后是嵌套的语句块,嵌套的语句块是由相同缩进的语句构成的。
header_line :
nested_statement_1
nested_statement_2
...
1,缩进
不需要在代码中输入任何语法上用来表名嵌套代码块的开始和结尾,取而代之的是,把嵌套代码语句向右缩进相同的距离,Python使用语句的实际缩进来确定代码块的开始和结尾。
所谓缩进,是指嵌套语句左侧的空白,Python并不在乎怎么缩进(可以使用空格或制表符)或者缩进多少(可以使用任意多个空格或制表符),强烈推荐使用一个制表符代表一个缩进。
语法规则规定:一个单独的嵌套代码块中的所有语句必须缩进相同的距离,否则,就会出现语法错误。
2,多行语句
Python语句一个语句横跨多行,只需要使用一对括号就可以了:小括号,中括号,大括号。任何括在括号中的程序代码都可横跨多行。语句会一直运行,直到Python遇到关闭的括号。
mlist=[1,2,3]
x=(a+b
+c+d)
if (a==1
and b==2):
print('OK')
三,赋值语句
Python中赋值语句把对象赋给一个变量名,基本形式是由表达式,变量和 = 构成的,左侧可以是变量名或对象元素,右侧是表达式。例如,赋值语句基本形式是:a=1,把1赋值给变量a
赋值语句的特性是:
- 赋值语句建立变量名和对象之间的引用,而不是复制对象;
- 变量名在首次赋值时会被创建;
- 变量名在引用前必须赋值。
1,赋值语句的基本形式
使用赋值符号=,把1赋值给变量a,通常情况下,使用基本赋值语句就可以满足程序设计的需要:
a=1
2,序列赋值
序列是指元组,列表和字符串,当在”=“左边编写成元组或列表时,Python把右边的对象和左边的变量从左至右按照位置相互匹配,注意:变量的数量和序列项的数量必须一致。
元组赋值形式,把1,2,3分别赋值给变量a,b,c:
a,b,c=1,2,3
列表赋值形式,把3,4,5分别赋值给变量a,b,c:
[a,b,c]=[3,4,5]
序列赋值运算,把字符串序列中的字符分别赋值给a,b,c:
>>> a,b,c='123'
>>> a,b,c
('1', '2', '3')
符合赋值运算,字符串既可以看作是一个序列,也可以看作是一个对象:
>>> ((a,b),c)='12','345'
>>> a,b,c
('1', '2', '345')
3,多目标赋值运算
多目标赋值运算,实现多个变量共享同一个对象,例如,把5赋值给变量a,b,c,可以认为先把5赋值给c,然后把c赋值给b,最后,把b赋值给a。
a=b=c=5
注意:多目标赋值语句只创建一个变量,三个变量全部指向内存中的同一对象。
当多个变量共享的对象是不可变对象时,由于不支持在原处修改,当对其中一个变量重新赋值,其他变量的值不变。Python会新建一个对象给该变化的变量。
>>> a=b=c=5
>>> c=6
>>> a,b,c
(5, 5, 6)
当多个变量共享的对象是可变对象时,由于支持在原处修改,当对其中一个变量重新赋值时,其他变量的值会改变。
>>> a=b=c=[1]
>>> a[0]=2
>>> a,b,c
([2], [2], [2])
为了避免这个问题,需要单独为每个变量赋值,以便分别初始化变量。
4,扩展序列解包(Python 3.0)
变量前面带有星号(*var),该变量收集了序列中没有赋值给其他变量的所有项。在一个赋值语句中,只能出现一个变量名前面带有星号,并且该项的类型是列表:
例如,把元组(1,2,3,4)赋值给变量a和b,a匹配序列中的第一项,b匹配序列中剩下的所有项:
>>> a,*b=1,2,3,4
>>> a,b
(1, [2, 3, 4])
四,分支结构
Python的分支结构有三个关键字:if,elif,else,分支结构的一般形式是:
if test1:
statement1
elif test2:
statement2
else:
statement3
如果test1为True,那么执行statement1;
如果test1为False,那么执行elif语句,测试test2,如果为True,那么执行statement2;如果为False,那么执行else语句块的statement3。
分支结构的特点是:
- 在多分支结构中,if是必需的,且只有一个,处于分支结构的开头;
- elif是可选的,可以有0,1和多个elif子句;
- else也是可选的,可以有0和1个,并且只能处于分支结构的末尾。
和C语言一样,Python同样有一个三元表达式:x=a if test else b
其等价的if表达式是:
if test:
x=a
else:
x=b
五,循环结构
Python的主要循环结构是while语句和for语句,while语句用于编写通用循环,而for语句用于遍历序列对象内的元素。
Python控制循环的关键字:
- break:离开循环,从当前行跳出循环,执行循环语句后面的语句;
- continue:从当前行跳到循环的首行,继续循环。
1,while循环
while循环的一般格式是由测试表达式,循环执行的语句块,和一个可选的else语句块。while语句通过loop_body修改test条件来控制循环的次数,或者使用break来跳离while循环。
while test :
loop_body
else:
statement_not_hit_break
当控制权离开循环体,且没有遇到break语句时执行else语句块。如果循环体从来没有执行过,那么else语句块也会执行。
2,for循环
for循环是一个通用的序列迭代器,可以遍历任何有序对象内的元素。for语句可以用于字符串、列表、元组和其他可迭代对象。
for循环的一般格式是成员赋值,循环执行的语句块,和一个可选的else语句块。当遍历完序列的所有元素,或者遇到break语句时,结束for循环。
for obj in seq:
loop_body
else:
statement_not_hit_break
当Python运行for循环时,会逐个把序列中的元素赋值给obj,然后为每个元素执行一次循环体(loop_body)。
for首行中用作赋值的变量名,可以在循环体中修改,但是,当循环回到首行时,obj就会被设置成序列中的下一个元素。
当序列中的元素是序列时,可以设置obj为序列对象,用于接受序列的元素,例如,序列中的元素是元组,设置obj为元组对象,用于接收序列的元素:
>>> for (a,b,c) in [(1,2,3),(4,5,6)]: print(a,b,c)
...
1 2 3
4 5 6
参考文档: