![机器学习入门: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=1738946355-6IXQvRO6q1U02feMdupu6hc4aFDb5Nhh-0-8b0959f79354e3cbd9745506fc1d33c0)
你将看到以下提示(或类似内容):
![012-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/012-04.jpg?sign=1738946355-Nv4WYmlrG4XGI2n4YY44xbnaL7g7UqRD-0-40bbf5c79c2219a11084da67c1e76148)
现在,在提示符处键入表达式2+7
:
![013-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-01.jpg?sign=1738946355-JUvaofAhJVNkFl7JrpnO39XzpQOEa5tg-0-6b9f982c4fa4f32835b28258e968b2b0)
Python显示如下结果:
![013-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-02.jpg?sign=1738946355-NgzbmWqDjfGH93gahpHuMu7Bj4DqiS9n-0-d1d0a7d23dc3b0d09261c1d34f0b0702)
按<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=1738946355-gHF0MIQc7PhmdZ4FLCko7Qto4Nodco8T-0-667cd0011fffe5560e6dbd8d974f5ea9)
举一个简单的例子,假设Python脚本myscript.py包含以下Python代码:
![013-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-04.jpg?sign=1738946355-TscAf0v7V48d3Dol3JkAP0YxPZqqCIMp-0-b58f62eef3a93b7cd9131850f8010b1d)
启动上面的Python脚本时,你将看到以下输出:
![013-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-05.jpg?sign=1738946355-eR9erSSOvWLrYaj25DeHEEFb4jcOnEDJ-0-6a6f1de0992132e53b2b206e2ac48839)
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=1738946355-dN0dnwnzSPQ7Djvy9c8yxYgrVZoUndqC-0-52ce2b19a50de6890dd4db9b277e5d8e)
Python中的多行语句换行结尾时可以使用换行符或反斜杠(“\”)字符,如下所示:
![014-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-02.jpg?sign=1738946355-zAH2dIHXcxRjWzXCOY5hZmLjo2Cz4hvQ-0-0d60ccff4c4b4827d1460deb9455c631)
显然这里可以将x1
、x2
和x3
放在同一行上,并无必要将三行分开。但如果需要添加一组超过一行的变量,则可以使用换行功能。
你可以使用分号(“;”)分隔每条语句,从而在一行中定义多个语句,如下所示:
![014-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-03.jpg?sign=1738946355-SYiDGXJyBT0KQJjZZYOr7TStrTjQmZdM-0-6cbaac8aefc47748b2476ff3ba1ce168)
上述代码片段的输出如下所示:
![014-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-04.jpg?sign=1738946355-uOjLnP6kP6qwAtsNpbeEI2V3oX3LBOqG-0-f22a477e4f2d9f2b9232f05fb720dc3e)
注意:在Python中不鼓励使用分号和连续字符。
3. Python中的引用和注释
Python允许对字符串文字添加单引号(')、双引号(")和三引号('''或"""),只要它们在字符串的开头和结尾可以相互匹配上。对跨越多行的字符串可以使用三引号。以下示例都是合法的Python字符串:
![014-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-05.jpg?sign=1738946355-U36pQd1wJ3EW9EZNgcPUoi8pmfsZy0uD-0-7cc0bad53d62a9d393f996b198501a77)
以字母“r”(代表“raw”)开头的字符串文字将所有内容视为文字字符,并“转义”了元字符的含义,如下所示:
![014-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-06.jpg?sign=1738946355-jgoJ0FEYRYq1kQVtkM6dMifhtyiBk0zo-0-3d8be4ec80ea0f4baa0e9154e34c144c)
以上代码块的输出如下所示:
![014-07](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-07.jpg?sign=1738946355-91Tdcv6V17cvWdApRFcZYcb5LGccbWv3-0-823c23e49b9d525ecb95d754159361f4)
你可以将单引号嵌入一对双引号中(反之亦然),用来显示单引号或双引号。另一种方法是,在单引号或双引号前加上反斜杠(“\”)字符。以下代码块说明了这点:
![015-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-01.jpg?sign=1738946355-wQfD9CpsXTxXPt3kQd8VxvoJ9CBOb7iN-0-beba283125d54a2a20c680961abf0435)
以上代码块的输出如下所示:
![015-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-02.jpg?sign=1738946355-tVYBi93adaKCIPyI83zSTJdIhBXUXqWr-0-c3b3277dce4c032f0c5c7960f836cf76)
不在字符串文字中的井号(#)是注释开始的标志。#后面直到该行结束的所有字符都是注释的一部分(会被Python解释器忽略)。考虑下列代码块:
![015-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-03.jpg?sign=1738946355-ci4j5ybfQqE62e8AKV4XuTIljQGNrwWb-0-63f59f4dc47647d983357ccf23b741ee)
结果如下所示:
![015-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-04.jpg?sign=1738946355-kXJICQl7bHTLVcJDm7DjKvVXBxG00cQE-0-223367ec452cf341ffc296f2efe1cc60)
注释可以和代码语句在同一行:
![015-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-05.jpg?sign=1738946355-9uTyxmiFxEguQbzscvX0kPMXd5W6Fx0D-0-91a801625598940085d567c1fdfbd73c)
也可注释多行,如下所示:
![015-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-06.jpg?sign=1738946355-uuJ0UhKdnuC9xfJ556cFt4w8FCRSXFH9-0-d6dc8496ac26973fb9632fa9c89f1f79)
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=1738946355-ZGSEogRPWZeAhGR9tzKOe5SG1srZdQUf-0-5f4d0e74a9ad44c8d52eafcb3002f2e6)
举个例子,将下面两个语句放在一个名为First.py的文本文件中:
![015-08](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-08.jpg?sign=1738946355-d6xQf64s7VcY4xmA2UMdH0SgTzrb0yx9-0-2061fe325cfba03efc6b4fd59b094824)
输入以下命令:
![016-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-01.jpg?sign=1738946355-DkhPcGhyISX1XGEv8nZ5laVWOKEwnMAn-0-0a92d65977d1d6c4b8759b0c7fbe3e27)
上述命令的输出为3,和前面从Python解释器执行的结果相同。
当直接运行Python模块时,特殊变量__name__
会被设置为__main__
。你会经常在Python模块中看到类似下面的代码:
![016-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-02.jpg?sign=1738946355-NCh9nQ51az76zinc8QJF39m8XK2wGtPE-0-c1082365887954453372b2a6e5f053d4)
上述代码片段用来让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=1738946355-yc3pKUvfL08YF1Y18OfHB4NvWoKj1yEr-0-0ce0b72483fcb3f6621cdf1c506e0e44)
本书中的代码示例导入了一个或多个上述模块,以及其他的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=1738946355-Zjw1JKnmqWcblNPKYW9Yr7xG0ZN6KUBA-0-a7ecc779bc5794e47e44fc9650616cb9)
上述命令可得到如下输出:
![017-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-01.jpg?sign=1738946355-KhoEq9Z1gk2MhWlKSZQgLtSWe1WUH3R4-0-79888d4b8898c3c7f330f3e8d3452979)
请注意,虽然dir()
没有列出内置函数和变量的名称,但是你可以从标准模块__builtin__
获取这些信息,该模块会自动以__builtins__
的名称导入:
![017-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-02.jpg?sign=1738946355-mMbz53OfZafMblw7IVLpoxd2kmZlv8te-0-dbd07048c4786487718f949ef3d1a085)
下面这个命令说明如何获取某个函数的更多信息:
![017-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-03.jpg?sign=1738946355-3jo6UEreUyBapPcVPpXaDg9YvC1La7ju-0-a77065cc9255844d29078e7bb95b9bb9)
该命令的输出如下:
![017-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-04.jpg?sign=1738946355-j9fN35OxAwilyOLYk9ND9MM7QvStN1yb-0-6aaf794300c8d1471d9106bd97851c15)
在需要有关特定函数或模块的其他信息时,请上网查阅文档,并尝试使用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=1738946355-CwOFkCFw1L5BWmD6hb7nv6OKuExDYLFV-0-a22e71c5905fdc80043c26dd1bfd3b2e)
仅当myFunc
函数传递的值为3时,上述代码才会失败,之后引起Python报错。
在第2章中,你将学习如何定义和调用用户自定义的函数,并了解Python中局部变量和全局变量之间的区别。
现在你已经了解了一些基本概念(例如,如何使用Python解释器)以及如何启动自定义Python模块,1.3节将讨论Python中的基本数据类型。