![机器学习入门: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=1739414687-dWL2gokXAO1qVwjcLziUNKhQzieQfKbI-0-bdf505d64e64a23d5c860104b5a49ac3)
你将看到以下提示(或类似内容):
![012-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/012-04.jpg?sign=1739414687-jjfS0U2dUgRGq86wTXnNLN4H6yFKZFgE-0-0c4d5ed7587802acb92ef3b41b822a8b)
现在,在提示符处键入表达式2+7
:
![013-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-01.jpg?sign=1739414687-azP4kEt7ESc2rl2MnIG3AbKT4PR4XyfK-0-d1f230b1eb8da2496d8fe17a40e04a40)
Python显示如下结果:
![013-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-02.jpg?sign=1739414687-1fYgV49qxnmSwv2SKgD7LbwKS9TMESc4-0-2464efe68d2cdefeb6fdd78e8a3ce881)
按<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=1739414687-VsNOhPmYPRPtp7kjJtnyOHQE3SJFsla4-0-944b08395e695801bf59871e9da2743a)
举一个简单的例子,假设Python脚本myscript.py包含以下Python代码:
![013-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-04.jpg?sign=1739414687-cQmGx3I1LBxpf4QaIoQwwXhbEEzzGbi8-0-7a6ca78b197df606ad32248b3942a46d)
启动上面的Python脚本时,你将看到以下输出:
![013-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/013-05.jpg?sign=1739414687-coI5ubEl4DMsfn7y3XYDCEqX9eK6NWZv-0-740108ee0b7cac2c69985e5ada3f0cbd)
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=1739414687-DTpFVLyv64iYeRHtwUPjze3DWK1wJyYg-0-1738617221c5081acedba827637fdcd4)
Python中的多行语句换行结尾时可以使用换行符或反斜杠(“\”)字符,如下所示:
![014-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-02.jpg?sign=1739414687-vO8QJrnjd9OYiGwH2AfbIY42WwrgdfwW-0-dab95862cf6dd6773dd86f6c80b97371)
显然这里可以将x1
、x2
和x3
放在同一行上,并无必要将三行分开。但如果需要添加一组超过一行的变量,则可以使用换行功能。
你可以使用分号(“;”)分隔每条语句,从而在一行中定义多个语句,如下所示:
![014-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-03.jpg?sign=1739414687-rGjAM6ijnmXyX8STDeIbmUVZmVKU4rS4-0-c4e0d93fa4dc3580ff7803eee34ddd9a)
上述代码片段的输出如下所示:
![014-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-04.jpg?sign=1739414687-dfxFEhNPdEI6mw5mj25ov2sRXRGJso4d-0-02dff8d2ec21aace467b07fba6f60745)
注意:在Python中不鼓励使用分号和连续字符。
3. Python中的引用和注释
Python允许对字符串文字添加单引号(')、双引号(")和三引号('''或"""),只要它们在字符串的开头和结尾可以相互匹配上。对跨越多行的字符串可以使用三引号。以下示例都是合法的Python字符串:
![014-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-05.jpg?sign=1739414687-ZHTzvLDrWzQXqNRlPKhvRkws3Ogl4eh2-0-48b4178d93cef09f29af19ad9871c229)
以字母“r”(代表“raw”)开头的字符串文字将所有内容视为文字字符,并“转义”了元字符的含义,如下所示:
![014-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-06.jpg?sign=1739414687-VyLKdnLU1NyIJX3TVD94ut4N18AFOyLo-0-e67ce09c2a95240b416cbda118e1877a)
以上代码块的输出如下所示:
![014-07](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/014-07.jpg?sign=1739414687-qNjoM9NfgNaSmnYHyXiqREyuyvgkCxaq-0-d3f83dce10208d55e7d02da7a47f74af)
你可以将单引号嵌入一对双引号中(反之亦然),用来显示单引号或双引号。另一种方法是,在单引号或双引号前加上反斜杠(“\”)字符。以下代码块说明了这点:
![015-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-01.jpg?sign=1739414687-POp0W3oDR8cxu1NIH3GFAmP83GeVXzrC-0-c1ccbbdabf1763091c31428d047eae2e)
以上代码块的输出如下所示:
![015-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-02.jpg?sign=1739414687-4sLElGaIWy2dQjAXHKMcd7L5xxR7AHMz-0-902bb3feb16f9d5e2f1612a1397db79d)
不在字符串文字中的井号(#)是注释开始的标志。#后面直到该行结束的所有字符都是注释的一部分(会被Python解释器忽略)。考虑下列代码块:
![015-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-03.jpg?sign=1739414687-DA0lCWzQIiBZd9jsYmKVx0NX0MnKrEiK-0-63be6d040f0d6bf8367980eefe3e46ea)
结果如下所示:
![015-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-04.jpg?sign=1739414687-xuBAMqPeTH3rkwHgAYIkIeDoGmgpBZOB-0-309152c38d035acccaa1e232f2a7c7dc)
注释可以和代码语句在同一行:
![015-05](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-05.jpg?sign=1739414687-huDeCLMcvA3RKxAfvXkjqBq2OUjRzsfn-0-154a40c1778e4362166adcc076ea9a14)
也可注释多行,如下所示:
![015-06](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-06.jpg?sign=1739414687-0bZUgzSWBUUq75OW5KUKoTXn4be1XkOO-0-7997e6d617b7e07b9e36d509ce515efd)
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=1739414687-tv7bW4ouB2fe14CxDohjo29KjWX4AKFD-0-f9c7c41dd8cdd3fe1d920e7af595b357)
举个例子,将下面两个语句放在一个名为First.py的文本文件中:
![015-08](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/015-08.jpg?sign=1739414687-Bk2E3wn88CjAjVjhy0tbnHP1cCCsweJY-0-73d7270f4d2970099a2147f2bf7b33e0)
输入以下命令:
![016-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-01.jpg?sign=1739414687-TZu8PCd1CKXDVNe1vdsruGKZBLYlfqsT-0-1730f4e79b78b4decdac475765aaec6b)
上述命令的输出为3,和前面从Python解释器执行的结果相同。
当直接运行Python模块时,特殊变量__name__
会被设置为__main__
。你会经常在Python模块中看到类似下面的代码:
![016-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/016-02.jpg?sign=1739414687-CC9GlflxnPH8po1CDrlnYve1tOvdui4O-0-7eddb5d15a7e2943c1611fa812618b94)
上述代码片段用来让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=1739414687-eLskhyjD2jGy8ThIdZokvMUSI1JgvGBD-0-3408c4a2375f085fd7a8d392e0c462be)
本书中的代码示例导入了一个或多个上述模块,以及其他的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=1739414687-STyE73HhfWJopqWYzT9DQyFT99eYnqNx-0-7737aa2cbd0dcfc51b18c835ddbc46e2)
上述命令可得到如下输出:
![017-01](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-01.jpg?sign=1739414687-hVx7eQduzQgMJJCacrti2bAoXu1v2ioU-0-a50364f7526702a3288b3ea22cf2db4a)
请注意,虽然dir()
没有列出内置函数和变量的名称,但是你可以从标准模块__builtin__
获取这些信息,该模块会自动以__builtins__
的名称导入:
![017-02](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-02.jpg?sign=1739414687-yAsKvvgiGKGM6uiQaWysJMul3oQayX4b-0-ca97dfd7f123d0d05e8e15cdde2d5f84)
下面这个命令说明如何获取某个函数的更多信息:
![017-03](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-03.jpg?sign=1739414687-pOr6pRuGYQvBCtmFuwM5yDz1sP8rxX8b-0-c6313708641804dca023282d5781aa02)
该命令的输出如下:
![017-04](https://epubservercos.yuewen.com/8036B4/21821545908478506/epubprivate/OEBPS/Images/017-04.jpg?sign=1739414687-wiVfbs6vlsMxpa7biKZrl07UGf9QppSB-0-d387df2ee806efc04eba4ca38a50ee2d)
在需要有关特定函数或模块的其他信息时,请上网查阅文档,并尝试使用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=1739414687-gkSidnchWeGtDzpZalHCopGc8UYI56yc-0-ce64e4aba5446638867f3da16cdcee13)
仅当myFunc
函数传递的值为3时,上述代码才会失败,之后引起Python报错。
在第2章中,你将学习如何定义和调用用户自定义的函数,并了解Python中局部变量和全局变量之间的区别。
现在你已经了解了一些基本概念(例如,如何使用Python解释器)以及如何启动自定义Python模块,1.3节将讨论Python中的基本数据类型。