![机器学习入门:Python语言实现](https://wfqqreader-1252317822.image.myqcloud.com/cover/84/41787084/b_41787084.jpg)
1.2 Python编程基础
1.2.1 Python交互式解释器
打开shell并键入以下命令,从命令行启动Python交互式解释器:
![012-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/012-03.jpg?sign=1739420494-sz4pudi9vV4Wkqf8jVhFFCoACEbWHwOi-0-6289291f7dc7b0acbfa5889a327d2d54)
你将看到以下提示(或类似内容):
![012-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/012-04.jpg?sign=1739420494-vSbqsZgBtvWcWtX3WQz7wJc4Z2BfU7SP-0-0651cd484421f44989bf02f3076d24b3)
现在,在提示符处键入表达式2+7
:
![013-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-01.jpg?sign=1739420494-YStVVx56xgd6GGGV1iMtVPjsj2UjInTJ-0-880710363db9de60a10c223e0f3ee8a3)
Python显示如下结果:
![013-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-02.jpg?sign=1739420494-mHDhPX9MkkULGZaGbpSIO31cWBOuBV5D-0-160a905e6a09304b87abacf716cb37d5)
按<ctrl+d>键退出Python shell。
你可以在命令行前添加单词“python”来启动任何Python脚本。如果你有一个包含Python命令的Python脚本myscript.py
,请按以下方式启动该脚本:
![013-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-03.jpg?sign=1739420494-06FKsLlrBEtTh4BNSrgzfld4lNn7wp6u-0-ead1f3c57aa6d7e137574a448cf7f2e5)
举一个简单的例子,假设Python脚本myscript.py包含以下Python代码:
![013-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-04.jpg?sign=1739420494-xFzB88Rez9DvlKiOahl3l7l0YwnN3C7k-0-37700cd22354d72c1428da61a7dac1b2)
启动上面的Python脚本时,你将看到以下输出:
![013-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-05.jpg?sign=1739420494-z1xfF8TVd9YEODKZzBAfHaqOEDtgTRgW-0-8ed3e5969b47c0c4be0ce26039eda914)
1.2.2 Python基础语法
1. Python标识符
Python标识符是变量、函数、类、模块或其他Python对象的名称,有效的标识符应符合以下规则:
- 以字母A到Z、a到z或者下划线(_)开头。
- 零个或多个字母、下划线和数字(0到9)。
注意:Python标识符不能包含@、$
和%之类的字符。
Python语言区分大小写,因此Python中的Abc和abc不同。
此外,Python具有以下命名惯例:
- 类名以大写字母开头,所有其他标识符以小写字母开头。
- 初始下划线用于私有标识符。
- 两个初始下划线用于强私有标识符。
Python标识符中,若有两个初始下划线和两个末尾下划线字符,则表示语言定义的特殊名称。
2. 行、缩进和多行
与其他编程语言(如Java或Objective-C)不同,Python在代码块中使用缩进而不是大括号。缩进在代码块中必须保持一致,如下所示:
![014-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-01.jpg?sign=1739420494-0yOOokcDkUZCkyFsG8uccdfDnTiS10pq-0-21050eeeb2e88a62df0688ccfb70bd19)
Python中的多行语句换行结尾时可以使用换行符或反斜杠(“\”)字符,如下所示:
![014-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-02.jpg?sign=1739420494-6jOYXl6QLU34cG8yHGLyL4ILsgghVF9E-0-f899cab5c6a4b59eaae9c23b3f16bd1f)
显然这里可以将x1
、x2
和x3
放在同一行上,并无必要将三行分开。但如果需要添加一组超过一行的变量,则可以使用换行功能。
你可以使用分号(“;”)分隔每条语句,从而在一行中定义多个语句,如下所示:
![014-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-03.jpg?sign=1739420494-H9sYZRwEqz3UYKvVd2jNa2KgtymHTROJ-0-dc556e583306c4e1e114f4683ceec913)
上述代码片段的输出如下所示:
![014-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-04.jpg?sign=1739420494-BUzUkTsX2v8DJ75NI6zuoQxQwKCwmh2j-0-1ef770a5cf5ec009c121db9fb848f5d3)
注意:在Python中不鼓励使用分号和连续字符。
3. Python中的引用和注释
Python允许对字符串文字添加单引号(')、双引号(")和三引号('''或"""),只要它们在字符串的开头和结尾可以相互匹配上。对跨越多行的字符串可以使用三引号。以下示例都是合法的Python字符串:
![014-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-05.jpg?sign=1739420494-ZAwHGXQ3BJcpxKJ95BPbkLSeyylArAPK-0-a0f0379274545ce89853ec54094fc4ca)
以字母“r”(代表“raw”)开头的字符串文字将所有内容视为文字字符,并“转义”了元字符的含义,如下所示:
![014-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-06.jpg?sign=1739420494-8QYPQj3I1Uwaczi5EpFohYrNR2I8ka2C-0-3ab7b340b432cd08cf151b7821797123)
以上代码块的输出如下所示:
![014-07](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-07.jpg?sign=1739420494-lI7qRdX0lwJAWwtVPEw96IzNnjmK5v3k-0-ac418e0142ddb036edd4d4fcf981180a)
你可以将单引号嵌入一对双引号中(反之亦然),用来显示单引号或双引号。另一种方法是,在单引号或双引号前加上反斜杠(“\”)字符。以下代码块说明了这点:
![015-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-01.jpg?sign=1739420494-5PQyVLTKXsOY34yERoJ3ZFViyfCIC1NR-0-e3d822a03700e51184d670b4a6d29329)
以上代码块的输出如下所示:
![015-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-02.jpg?sign=1739420494-XhHRKCxklLUkeZMUZkSEVXbDdDUBdHLt-0-ad23f3cfe1f9e99b8e7355d027e9eeee)
不在字符串文字中的井号(#)是注释开始的标志。#后面直到该行结束的所有字符都是注释的一部分(会被Python解释器忽略)。考虑下列代码块:
![015-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-03.jpg?sign=1739420494-cGHESzROH9Hv6DU1lAPUsLOHpnXjPwNq-0-52cbcf238d5d0a439799eaebdb5e043c)
结果如下所示:
![015-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-04.jpg?sign=1739420494-Z7Cx3l3HvjCLsV94l1MpaaCaHAxzRe6j-0-952a8dc9c06a6a60e1090bcad8876676)
注释可以和代码语句在同一行:
![015-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-05.jpg?sign=1739420494-varNfq2iGjAZD7Xglyn8HS7qD6B9Bwje-0-82a737fb8494aca0001006dc65a2ff28)
也可注释多行,如下所示:
![015-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-06.jpg?sign=1739420494-SYMI238gyRWNa7908NMNwHOygw5yk8q1-0-1879f525fcc4b29b825080275f55ed68)
Python中的空白行是仅包含空格或者注释(或两者兼有)的行。
1.2.3 以模块形式保存代码
前面介绍了如何从命令行启动Python解释器,然后输入Python命令。但在Python解释器中输入的所有内容仅对当前会话有效,如果退出解释器,再次启动时,之前的定义将不再有效。幸运的是,Python允许你将代码存储在文本文件中。
Python中的模块是一个包含Python语句的文本文件。前面介绍了Python解释器如何检验对当前会话有效的代码片段。如果要保留代码片段和定义,请将其存于文本文件中,以便在Python解释器之外执行该代码。
首次导入模块时,Python中最外面的语句从上到下执行,然后对变量和函数进行设置。
Python模块可以直接从命令行运行,如下所示:
![015-07](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-07.jpg?sign=1739420494-IudHovqko8hdxCQIqAq4clfvfK6gsOM6-0-49ae13b971d5795d77c2e8b4edd60c66)
举个例子,将下面两个语句放在一个名为First.py的文本文件中:
![015-08](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-08.jpg?sign=1739420494-XXs92CzPiqct1P5mYBVuIHXo6a7iZ46Y-0-53e6f36d9c5b82aacdc54c14581467e4)
输入以下命令:
![016-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-01.jpg?sign=1739420494-geqP1Jqo8jfZyedf4Jmp7Ni9w5ttLKne-0-7c6bfa542835e0f2194ed1caaf61df7d)
上述命令的输出为3,和前面从Python解释器执行的结果相同。
当直接运行Python模块时,特殊变量__name__
会被设置为__main__
。你会经常在Python模块中看到类似下面的代码:
![016-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-02.jpg?sign=1739420494-QcXbNCLg7om9ygRIbf2AtuNKTzk2b84Q-0-de4be9d9e29da42018a48acbfd6c5169)
上述代码片段用来让Python判断,是从命令行启动Python模块,还是将其导入另一个Python模块。
1.2.4 Python中的一些标准模块
Python标准库提供了许多可以简化Python脚本的模块。可以访问如下网址查看标准库模块的列表:
一些最重要的Python模块包括cgi
、math
、os
、pickle
、random
、re
、socket
、sys
、time
和urllib
。
本书中的代码示例使用模块math
、os
、random
、re
、socket
、sys
、time
和urllib
。你需要导入这些模块才能在自己的代码中使用它们。例如,下面这个代码块说明了如何导入4个标准Python模块:
![016-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-03.jpg?sign=1739420494-HTtq8gsGb9BbTHt3hOfC6D0Yk3u3aXxv-0-9066b62134aa7c4b7aa76dd3bdff4a24)
本书中的代码示例导入了一个或多个上述模块,以及其他的Python模块。
1.2.5 help()
和dir()
函数
在网上搜索Python相关的主题会得到很多有用信息的链接,或者也可以查看Python官方文档:docs.python.org
此外,Python提供了可以从Python解释器访问的help()
和dir()
函数。help()
函数返回解释文档,dir()
函数返回定义的符号。
例如,如果输入help(sys)
,则将看到sys
模块的文档,而dir(sys)
显示已定义符号的列表。
在Python解释器中输入以下命令,可以显示Python中与字符串相关的方法:
![016-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-04.jpg?sign=1739420494-yadV3mTl8ugfvpULP9p1pj5HjZyoQlnT-0-1c39a5c82f14fdb1b2b9f1006d8cb177)
上述命令可得到如下输出:
![017-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-01.jpg?sign=1739420494-X7jBLbXe8XupunL36APBNjciHVtTCUVB-0-d2fbe94829ec2c82e998e97a56158db8)
请注意,虽然dir()
没有列出内置函数和变量的名称,但是你可以从标准模块__builtin__
获取这些信息,该模块会自动以__builtins__
的名称导入:
![017-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-02.jpg?sign=1739420494-zibOsHp83eqwzDYINvLINgNkvAcJqpyF-0-551d153715ca5553d619b91c017304b4)
下面这个命令说明如何获取某个函数的更多信息:
![017-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-03.jpg?sign=1739420494-wZW6mecT12zpFuMvN3X1fEvExhpuqtTP-0-52eba99f295d58f1b682fd1eb861d284)
该命令的输出如下:
![017-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-04.jpg?sign=1739420494-Mc2pVzOhrMS94NHCeA3XoHFxGy4R1fE0-0-6f3faa2456959d67a6f0e6aec45c0d6a)
在需要有关特定函数或模块的其他信息时,请上网查阅文档,并尝试使用help()
和dir()
。
1.2.6 编译时和运行时的代码检查
Python支持一些编译时的代码检查,但大部分检查(如类型、名称等)都要推迟到代码执行的时候。因此,如果Python代码引用了一个不存在的用户自定义函数,该代码仍然会成功编译。事实上,仅当代码执行路径引用了不存在的函数时,该代码才会因异常而失败。
简单举例,请考虑下面的Python函数myFunc
,该函数引用了一个不存在的函数DoesNotExist
:
![018-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/018-01.jpg?sign=1739420494-OctKt2zSZ8UOZwPLQrSWMOXuzUy7AwBI-0-f29ad209d260e27f54e37d609dec7a41)
仅当myFunc
函数传递的值为3时,上述代码才会失败,之后引起Python报错。
在第2章中,你将学习如何定义和调用用户自定义的函数,并了解Python中局部变量和全局变量之间的区别。
现在你已经了解了一些基本概念(例如,如何使用Python解释器)以及如何启动自定义Python模块,1.3节将讨论Python中的基本数据类型。