![Python程序设计应用教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/751/31729751/b_31729751.jpg)
4.5 模块
模块(Module)能够有逻辑地组织Python代码段。把相关的代码分配到一个模块中能让代码更好用,更易懂。简单地说,模块就是一个保存了Python代码的文件。模块中能定义函数、类和变量。
导入Python中的模块和C语言中的头文件同引用Java中的包类似,例如,在Python中要调用sqrt()函数,必须用import关键字导入math这个模块。下面就学习Python中的模块。
4.5.1 import导入模块
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00075003.jpg?sign=1738912250-Bkw3tyJR8QrZOqC4Rp4xLtTTeINLzBkc-0-605b790f3e7242837a6ed9fa8eafaa23)
模块
1.导入模块的方式
在Python中用关键字import来导入某个模块。方式如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00075004.jpg?sign=1738912250-xjX46gQdL03urBuKRNqD4CaFuU96Nztt-0-7eae9981e684848e6a57c4876fae203c)
例如,要引用模块math,可以在文件最开始的地方用import math来导入。
调用模块中函数的方法如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00075005.jpg?sign=1738912250-7yG9XbacdP4LgosRhXvhCR8TS1kUcieZ-0-d5b2970279f5423ec19d9ca7a7a09edb)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076001.jpg?sign=1738912250-W4LPHE9X9LV8xMWmzsxBiUhmQY1T9ZXi-0-9d96b0f170586e2d2dae1f7b7731def0)
为什么必须加上模块名进行调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以,如果像上述这样导入模块的时候,调用函数必须加上模块名。
若只需要用到模块中的某个函数,只需要导入该函数即可,导入语句如下:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076002.jpg?sign=1738912250-HGnoBJa8GIdrE8qpTo9JKuJ8qhOTi6X8-0-7a9a26139ad8b56b1bfdf79d32adfd09)
通过这种方式导入,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数时,后面一次导入会覆盖前一次导入。
也就是说,假如模块A中有函数fun(),在模块B中也有函数fun(),如果导入A中的fun()在先、B中的fun()在后,那么当调用fun()函数时,会执行模块B中的fun()函数。
如果想一次性导入math中所有的项目,可以通过:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076003.jpg?sign=1738912250-zICZkQ2t0noMmNXBEkUD8wpcadeW0yUW-0-f7469756bf2a026d7553d6659f530c52)
这是一种简单的导入模块中所有项目的方法,然而不建议过多地使用这种方式。
2.模块位置的搜索顺序
当导入一个模块时,Python解析器对模块位置的搜索顺序如下:
(1)当前目录。
(2)如果不在当前目录,Python则搜索在Python PATH环境变量下的每个目录。
(3)如果都找不到,Python会查看由安装过程决定的默认目录。
模块搜索路径存储在system模块的sys.path变量中。变量中包含当前目录、Python PATH和由安装过程决定的默认目录。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076004.jpg?sign=1738912250-NJQZc2jNdRY8tU44FWcv0syUDqfYf3kT-0-694cc4d66243b36ec3cadb0d3719b918)
输出结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076005.jpg?sign=1738912250-raAcmp8xsL6RDFOD5yATjEWF0vaS1zRE-0-26b1e19bccef04735e941a694f38a6fd)
3.列举模块内容
dir(模块名)函数返回一个排好序的字符串列表,内容是模块中定义的变量和函数。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076006.jpg?sign=1738912250-CIX6gyyPaAWccZCfp9Ie6cuKt4WweC1N-0-5dc3083a14294bf7a4bba18d457544a2)
输出结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00076007.jpg?sign=1738912250-v2rbSVuuhqqGhn7j7YWT2IUKOFwloqQP-0-701a235ae354fff482ee81bb8b3e4dc2)
在此,特殊字符串变量_ _name_ _指模块的名字,_ _file_ _指该模块所在文件名,_ _doc_ _指该模块的文档字符串。
4.5.2 定义自己的模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
例如,有这样一个文件fibo.py,在fibo.py中定义了3个函数add()、fib()、fib2():
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077002.jpg?sign=1738912250-rjBxNSWxHS2NATtCzLLBsgdcMa3Obani-0-4f82f28040eb53c067e9788b5ecb9744)
那么在其他文件(如test.py)中就可以按如下方式使用:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077003.jpg?sign=1738912250-GHo7jJSJvBJUARpgY4PKXKKDynJsX7tl-0-38a72a18b888926fabfeaf50428fc5e1)
加上模块名称来调用函数:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077004.jpg?sign=1738912250-AB1TVspfYJBhQLvFBhPYF6XCK74AYB5c-0-60750eab4ed902bb962a55c8641ae55d)
当然,也可以通过from fibo import add,fib,fib2来导入。
用直接函数名调用函数:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077005.jpg?sign=1738912250-eI2rKzX0cHG2KMaLE72f2H7BAwFCeUxw-0-ee3ec2bcfdbc3be7339d4144e5a2a8f8)
如果想列举fibo模块中定义的属性列表,可输入如下语句:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077006.jpg?sign=1738912250-r8Wp9Mb3UzIb4zGEuA9vx8oZAseInOps-0-0ba7b06c7f5a23e75521d60fabfc179a)
输出结果:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00077007.jpg?sign=1738912250-hDyEz9RGYPxnuiZuv85x3rWuTRJ6rMyL-0-6c3e7ec3bf19b23b2bb47b0eaa55cf0a)
下面学习一些常用标准模块。
4.5.3 time模块
在Python中,通常有2种方式来表示时间:
(1)时间戳,是从1970年1月1日00:00:00开始到现在的秒数。
(2)时间元组struct_time,其中共有9个元素。具体如下:
tm_year(年比如2011)、tm_mon(月)、tm_mday(日)、tm_hour(小时,0-23)、tm_min(分,0-59)、tm_sec(秒,0-59)、tm_wday(星期,0–6,0表示周日)、tm_yday(一年中的第几天,1-366)、tm_isdst(是否是夏令时,默认为1夏令时)。
time模块包含既有时间处理的、也有转换时间格式的函数,如表4-5所示。
表4-5 time模块中的函数
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00078001.jpg?sign=1738912250-E4Ua7veGTMH1v5EX5xuPREYhzBQ2kFDx-0-ec0e25e8212eddb3643a47a48a3e5cfc)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00078002.jpg?sign=1738912250-3anpOlluDuXMEPElVl3W3SvEuVgQHfEm-0-76fd246d8c8e5965266f22c69f969f51)
4.5.4 calendar模块
此模块的函数都是与日历相关的,例如打印某月的字符月历。星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。calendar模块中包含的函数如表4-6所示。
表4-6 calendar模块中的函数
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00079001.jpg?sign=1738912250-nufXup8hmo8IFCpqSw0QjCcXWso6Sqal-0-272bbaecf9c4ebaab34d9b948eaf3c78)
另外,Python在提供datetime模块支持日期和时间运算的同时,还能更有效地处理和格式化输出。同时该模块还支持时区处理。例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00079002.jpg?sign=1738912250-e4zrpuNIfU9UdE2sopLoiL4vdZM7JxQn-0-c88ade86079b6291a8956aae36054e69)
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00080001.jpg?sign=1738912250-oToo5nuAZOPIZD0wtF0F6RUl1kPRsKtq-0-adf64c362958e68ba7fb702109f5fa9a)
4.5.5 random模块
随机数可以用于数学、游戏等领域,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。随机数函数在random模块中,常用的随机数函数如表4-7所示。
表4-7 常用的随机数函数
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00080002.jpg?sign=1738912250-OZsaJYNcMLP34knpIOQ6AwHflqvP82Ea-0-ebbdb19c3063fc0e842a7f0e6e945b71)
4.5.6 math模块和cmath模块
math模块实现了许多对浮点数的数学运算函数,这些函数一般是对C语言库中同名函数的简单封装。math模块的数学运算函数如表4-8所示。
表4-8 math模块的数学运算函数
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00080003.jpg?sign=1738912250-PBHzftADAFKIyzSHrKBYzwCKMNEYdk7y-0-580e02ada6451d02e684cac86bcf9b1e)
续表
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00081001.jpg?sign=1738912250-9TKhrNfmstlri2iRVEINHqF5GIXfQHsd-0-335976def85d68ffa4d52af8295f5862)
例如:
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00081002.jpg?sign=1738912250-pWRyP6V9hQUF9Mnr11nInyDHTTgMGazo-0-49ed8cd5c87b810da679c1ce3d37fb58)
另外,在Python中cmath模块包含了一些用于复数运算的函数。cmath模块的函数跟math模块函数基本一致,区别是cmath模块运算的是复数,math模块运算的是数学运算。
![](https://epubservercos.yuewen.com/596AA5/17180253805312106/epubprivate/OEBPS/Images/img00081003.jpg?sign=1738912250-YpxxfNBmfzshJf5U4Y4VvZyWbL5S3ofc-0-3d0c1ce69010dda8fea6013ebd8aeca5)