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