zoukankan      html  css  js  c++  java
  • 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

    参考文档:

  • 相关阅读:
    论语言思维的差异
    lua经典问题
    跳槽的故事
    未来一年计划
    腾讯面试题 找重复的数
    nodejs学习
    node记录
    mysql 常用总结
    ubuntu 服务器搭建汇总
    ubuntu下安装golang
  • 原文地址:https://www.cnblogs.com/ljhdo/p/5569334.html
Copyright © 2011-2022 走看看