购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
Python的基础语法

要想掌握一门编程语言,首先需要学会其基本的语法和语义规范。Python的语言特性是简洁明了,当运行一个功能时,Python通常只使用一种固定的方式。虽然不像其他计算机语言有丰富的语法格式,但是Python也可以完成其他计算机语言所能完成的功能,而且更容易。本章主要讲解Python的一些基本语法。

2.1 标识符与关键字

标识符用来识别变量、函数、类、模块及对象的名称。Python的标识符可以包含英文字母(A~Z、a~z)、数字(0~9)及下画线符号(_),但它有以下几个方面的限制:

(1)首字符可以是下画线(_)或字母,但不能是数字,并且变量名称之间不能有空格。

(2)除首字符外的其他字符必须是下画线、字母和数字。

(3)Python的标识符有大小写之分,如Data与data是不同的标识符。

(4)由于Python 3.x的字符采用了双字节Unicode编码,因此中文等亚洲文字也可以作为标识符。

(5)关键字不可以当作标识符。

使用交互方式执行以下命令可以查看Python的关键字:

    import keyword
    print(keyword.kwlist)

输出35个关键字,结果如下:

    ['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']

(6)不要使用Python的内置函数名作为自己的标识符。

例如查看以下标识符哪些是合法的:

    名称     _price   pass      name@    8goods
    Price$  _price#  goods6  _news     Uers_name

这里只有名称_price、goods6、_news和Uers_name是合法的,@、$和#不能构成标识符,关键字pass也不能作为标识符。

2.2 变量

在Python解释器内可以直接声明变量的名称,不必声明变量的类型。为一个变量赋值的同时就声明了该变量,该变量的数据类型就是赋值数据所属的类型。该变量还可以接收其他类型的数据。

例如使用交互方式执行以下代码,运行结果如图2-1所示。

图2-1 声明变量并赋值

注意: 虽然Python这种变量声明方式非常灵活,但也会给开发带来一些麻烦。例如图2-1代码中本来想把字符串“苹果”赋值给y,却不小心赋值给了x。由于Python默认所有变量都可以接收不同类型的数据,因此也不容易发现这个错误。

Python允许用户同时为多个变量赋值。例如使用交互方式执行以下代码,运行结果如图2-2所示。

图2-2 同时为多个变量赋值

如果创建变量时没有赋值,会提示错误,例如执行以下代码:

    u

输出结果如下:

    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        u
    NameError: name 'u' is not defined

2.3 程序结构

学习Python开发之前,首先需要了解Python的程序结构。

2.3.1 缩进分层

与其他常见的语言不同,Python的代码块不使用大括号({})来控制类、函数及其他逻辑判断。Python语言的主要特色就是用缩进分层来写模块。

【例2.1】严格执行缩进(源代码\ch02\2.1.py)。

    if True:
        print ("牧童骑黄牛")
        print ("歌声振林樾")  #严格执行缩进
    else:
        print ("意欲捕鸣蝉")
        print ("忽然闭口立")

保存并运行程序,结果如下:

    牧童骑黄牛
    歌声振林樾

Python程序中缩进的空白数量虽然是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个要严格执行。

【例2.2】没有严格执行缩进(源代码\ch02\2.2.py)。

    if True:
        print ("牧童骑黄牛")
    print ("歌声振林樾")    #没有严格执行缩进
    else:
        print ("意欲捕鸣蝉")
        print ("忽然闭口立")

保存并运行程序,结果报错,信息如下:

    SyntaxError: invalid syntax

除了要保证相同的缩进空白数量外,还要保证相同的缩进方式,有的使用Tab键缩进,有的使用2个或4个空格缩进,需要改为相同的缩进方式。

注意: Python的编程规范指出:缩进最好采用空格的形式,每一层向右缩进4个空格。

2.3.2 换行问题

在Python语言中,常见的换行问题如下。

1.换行符

如果是Linux/UNIX操作系统,换行字符为ASCII LF(linefeed);如果是DOS/Windows操作系统,换行字符为ASCII CR LF(return + linefeed);如果是Mac OS操作系统,换行字符为ASCII CR(return)。

例如,在Windows操作系统中换行,运行命令结果如图2-3所示。

图2-3 在Windows操作系统中换行

2.程序代码超过一行

如果程序代码超过一行,可以在每一行的结尾添加反斜杠(\),继续下一行,这与C/C++的语法相同。例如:

    if 1900 < year < 2100 and 1 <=month <=12\
        and 1 <= day <= 31 and 0 <= hour < 24 \
        and 0 <= minute < 60 and 0 <= second < 60:  #多个判断条件

注意: 每个行末的反斜杠(\)之后不加注释文字。

如果是以小括号(())、中括号([])或大括号({})包含起来的语句,不必使用反斜杠(\)就可以直接分成数行。例如:

    month_names = ['Januari', 'Februari',  'Maart',
                 'April',   'Mei',     'Juni',
                 'Juli',    'Augustus', 'September',
                 'Oktober', 'November', 'December']
3.将数行表达式写成一行

如果要将数行表达式写成一行,只需在每一行的结尾添加上分号(;)即可。例如:

    x = 100; y = 200; z = 300

2.3.3 代码注释

Python中的注释有单行注释和多行注释。Python中单行注释以#开头。例如:

    # 这是一个注释
    print("Hello, World!")

多行注释用3个单引号(''')或3个双引号(""")将注释括起来。

(1)3个单引号:

    '''
    这是多行注释,用3个单引号
    这是多行注释,用3个单引号
    这是多行注释,用3个单引号
    '''
    print("这是Python语言的注释")

(2)3个双引号:

    """
    这是多行注释,用3个双引号
    这是多行注释,用3个双引号
    这是多行注释,用3个双引号
    """
    print("这是Python语言的注释")

2.4 Python的输入和输出

Python的内置函数input()和print()用于输入和输出数据。下面将讲解这两个函数的使用方法。

2.4.1 接收键盘输入

Python提供的input()函数从标准输入读入一行文本,默认的标准输入是键盘。input()函数的基本语法格式如下:

    input([prompt])

其中,prompt是可选参数,用来显示用户输入的提示信息字符串。用户输入程序所需要的数据会以字符串的形式返回。

【例2.3】测试键盘的输入(源代码\ch02\2.3.py)。

    x= input("请输入最喜欢的水果:")

上述代码用于提示用户输入水果的名称,然后将名称以字符串的形式返回并保存在x变量中,以后可以随时调用这个变量。

当运行此句代码时,会立即显示提示信息“请输入最喜欢的水果:”,之后等待用户输入信息。当用户输入“葡萄”并按Enter键时,程序就接收了用户的输入。最后调用x变量,就会显示变量所引用的对象——用户输入的水果名称。

测试结果如图2-4所示。

图2-4 测试键盘的输入

从结果可以看出,添加提示用户输入信息是比较友好的,这对编程时所需要的友好界面非常有帮助。

注意: 用户输入的数据全部以字符串形式返回,如果需要输入数值,就必须进行类型转换。

2.4.2 输出处理结果

print()函数可以输出格式化的数据,与C/C++的printf()函数功能和格式相似。print()函数的基本语法格式如下:

    print(value,…,sep=' ' ,end='\n')  #此处只说明了部分参数

上述参数的含义如下:

(1)value是用户要输出的信息,后面的省略号表示可以有多个要输出的信息。

(2)sep用于设置多个要输出信息之间的分隔符,其默认的分隔符为一个空格。

(3)end是一个print()函数中所有要输出信息之后添加的符号,默认值为换行符。

【例2.4】测试处理结果的输出(源代码\ch02\2.4.py)。

    print("牧童骑黄牛","歌声振林樾")            #输出测试的内容
    print("牧童骑黄牛","歌声振林樾",sep='*')  #将默认的分隔符修改为'*'
    print("牧童骑黄牛","歌声振林樾",end='>')  #将默认的结束符修改为'>'
    print("牧童骑黄牛","歌声振林樾")            #再次输出测试的内容

保存并运行程序,结果如下所示。这里调用了4次print()函数。其中,第1次为默认输出,第2次将默认的分隔符修改为“*”,第3次将默认的结束符修改为“>”,第4次再次调用默认的输出。

    牧童骑黄牛 歌声振林樾
    牧童骑黄牛*歌声振林樾
    牧童骑黄牛 歌声振林樾>牧童骑黄牛 歌声振林樾

从运行结果可以看出,第一行为默认输出方式,数据之间用空格分开,结束后添加了一个换行符;第二行输出的数据项之间以“*”分开;第三行输出结束后添加了一个“>”,与第4条语句的输出放在了同一行中。

注意: 从Python 3开始,不再支持print输出语句,例如print "Hello Python",解释器将会报错。

如果输出的内容既包括字符串,又包含变量值,就需要将变量值格式化处理。例如:

    >>> x = 100
    >>> print ("x = %d" % x)
    x = 100

这里要将字符串与变量之间以%符号隔开。

如果没有使用%符号将字符串与变量隔开,Python就会输出字符串的完整内容,而不会输出格式化字符串。例如以下代码:

    >>> x = 100
    >>> print ("x = %d",x)
    x = %d 100

【例2.5】实现不换行输出(源代码\ch02\2.5.py)。

    a="春风又绿江南岸,"
    b="明月何时照我还。"
    #换行输出
    print( a )
    print( b )
    print('---------')
    # 不换行输出
    print( a, end=" " )
    print( b, end=" " )
    print()

保存并运行程序,结果如下:

    春风又绿江南岸,
    明月何时照我还。
    ---------
    春风又绿江南岸, 明月何时照我还。

在本示例中,通过在变量末尾添加end="",可以实现不换行输出的效果。读者从结果可以看出换行和不换行的不同之处。

2.5 认识模块

在Python中,一个模块就是一个文件,模块是保存代码的最小单位,在模块中可以声明变量、函数、属性和类等Python代码元素。一个模块可以访问另一个模块中的元素,这里需要使用导入语句的帮助,导入语句有以下3种形式。

1.import<模块名称>

在使用某个模块之前,必须先使用import语句加载这个模块。语法格式如下:

    import <模块名称>

当解释器遇到import语句时,会在当前路径下搜索该模块文件。

例如,定义一个文件a.py为模块,然后在b.py文件中导入。通过这种方式会导入a模块的所有代码元素,在访问时需要加前缀“a.”。

a.py文件的代码如下:

    x=360

b.py引入a模块,代码如下:

    #导入模块
    import a
    #现在可以调用a模块中包含的元素
    print("本次考试分数为:%d分" % a.x)

将a.py和b.py文件保存在同一目录下。运行b.py,输出结果如下:

    本次考试分数为:360分

无论用户执行多少次import,一个模块只会被导入一次,这样可以防止导入模块被一遍又一遍地执行。

2.from<模块名>import<代码元素>

通过这种方式导入模块中的指定元素,在访问时不需要加前缀“a.”。

c.py引入a模块中的x元素,代码如下:

    #导入模块中的元素
    from a import x
    #现在可以调用a模块中包含的元素x
    print("本次商品的采购量:%d台" % x)

运行c.py,输出结果如下:

    本次商品的采购量:360台
3.from<模块名>import<代码元素>as<代码元素别名>

这种方式和第2种类似。通过as设置代码元素的别名,可以避免两个模块中出现重名的问题。

d.py引入a模块中的x元素,代码如下:

    #导入模块中的元素
    from a import x as ax
    x=660
    # 现在可以调用a模块中包含的元素x
    print("洗衣机还剩%d台" % ax)

运行d.py,输出结果如下:

    洗衣机还剩360台

综上所述,在实际的项目开发中,如果想导入所有内容,则使用import语句;如果只是导入一个元素,则使用from import语句;如果名称有冲突,则使用from import as语句。 G4C9tdB/RfnMWulKlh6vB50buYUp+45oKuxNFNuhFPzswUqZ1ZCl3Seox/YhUAXx

点击中间区域
呼出菜单
上一章
目录
下一章
×