3.4 引入那把宝剑
1.引入模块
网上曾经流行一个技术讨论:“如何用编程语言杀死一条龙?”有很多有趣的答案,比如Java语言,是“赶到那里,找到巨龙,开发出一套由多个功能层组成的恶龙歼灭框架,写几篇关于这种框架的文章……但巨龙并没有被消灭掉。”这个回答其实是在取笑Java复杂的框架。C语言则是“赶到那里,对巨龙不屑一顾,举起剑,砍掉巨龙的头,找到公主……把公主晾在一边,去看看有没有最新提交的Linux内核代码。”这个答案则是夸奖C语言的强大,以及C语言社区对Linux内核的投入。至于Python语言,很简单:
importslay_dragon
了解Python模块的人会对这行代码微微一笑。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其他文件中的函数。而引入(import)模块,就是为了在新的程序中重复利用已有的Python程序。Python通过模块,让你可以调用其他文件中的函数。我们先写一个first.py文件,内容如下:
def laugh():
print("HaHaHaHa")
再在同一目录下写一个second.py文件。在这段程序中引入first模块:
from first import laugh
for i in range(10):
laugh()
借着import语句,我们可以在second.py中使用first.py中定义的laugh()函数。除了函数,我们还可以引入其他文件中包含的数据。比如我们在module_var.py中写入:
text = "Hello Vamei"
在import_demo.py中,我们引入这一变量:
from import_demo import text
print(text) # 打印'Hello Vamei'
对于面向过程语言来说,模块是比函数更高一层的封装模式。程序可以以文件为单位实现复用。典型的面向过程语言,如C语言,有很完善的模块系统。把常见的功能编到模块中,方便未来使用,就成为所谓的库(library)。由于Python的库非常丰富,所以很多工作都可以通过引用库,即借助前人的工作来完成。这也是Python要用import语句来杀龙的原因。
2.搜索路径
我们刚才在引入模块时,把库文件和应用文件放在了同一文件夹下。当在该文件夹下运行程序时,Python会自动在当前文件夹搜索它想要引入的模块。
但Python还会到其他的地方寻找库:
- 标准库的安装路径
- 操作系统环境变量PYTHONPATH所包含的路径
标准库是Python官方提供的库。Python会自动搜索标准库所在的路径。因此,Python总能正确地引入标准库中的模块。例如:
import time
如果你是自定义的模块,则可以放在自认为合适的地方,然后修改PYTHONPATH这个环境变量。当PYTHONPATH包含模块所在的路径时,Python便可以找到那个模块。修改PYTHONPATH的方式可参考本章附录A。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论