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

参考文档:

posted @ 2016-06-08 10:46  悦光阴  阅读(1395)  评论(5编辑  收藏  举报