19 Python模块

  • 模块(module)可以有逻辑的组织代码段,把相关代码分配到一个模块里可以让代码更易懂。
  • 简而言之,模块就是个保存了Python代码的文件。模块里可以定义函数、类和变量。
  • 在Python中模块和java中的包、c语言中的头文件很类似。比如Python中要调用sqrt函数,必须先用import关键字引入math这个模块:
import math

print('25的平方根', math.sqrt(25))  # 输出5

一.导入模块的方式

  • Python中使用关键字import来导入某个模块,例如:import 模块名。这种方法导入的模块,在调用模块中的函数时,必须用:模块名.函数名。
  • 有时候我们只需要用到模块中的某个函数,只需要引入该函数即可。这时候可以通过语句:from 模块名 import 函数名1,函数名2……。通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名。

二.模块位置的搜索顺序

  • 导入一个模块,Python解析器对模块位置的搜索顺序是:
    1.当前目录
    2.PYTHON PATH环境变量下的每个目录
    3.安装过程决定的默认目录

  • 模块搜索路径存储在system模块的sys.path变量中,变量包含上面123所说的路径。

三.列举模块内容

dir(模块名)函数返回一个排好序的字符串列表,内容是模块里定义的变量和函数。

import sys
print(dir(sys))

四.定义自己的模块

  • 在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

示例:有一个文件fibo.py,在fibo.py中定义了三个函数add(a,b),fib_prt(n),fib_seq(n)

# fibo.py
def add(a, b):
    return a + b


def fib_prt(n):
    a, b = 0, 1
    while b < n:
        print(b, end='')
        a, b = b, a + b
    print()


def fib_seq(n):
    result = []
    a, b = 0, 1
    result.append(0)
    result.append(1)
    while b < n:
        result.append(b)
        a, b = b, a + b
    return result

那么在其他文件(如test.py中就可以使用)

import fibo
fibo.fib_prt(1000)#输出1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 

可能出现“ModuleNotFoundError: No module named ‘fibo’“,是因为模块路径不在搜索范围内,没有找到。
可以通过sys.path查看搜索路径,通过sys.path.append(‘模块路径’),添加搜索路径。

  • 在实际开发中,开发人员往往在模块中添加测试信息。
def add(a, b):
    return a + b


# 用来测试
result = add(12, 22)
print("in testmodule.py file, 12+22=%d" % result)

如果其他py文件中引用了此文件,如:

import testmodule as tm
result = tm.add(11,22)
print(result)

输出结果:
in testmodule.py file, 12+22=34
33

  • 在上面的案例中,发现测试代码也运行了。为了解决这个问题,python为每个模块提供了一个__name__属性,当其值为__main__的时候,表示该模块自身在运行,否则就是被引用。
def add(a, b):
    return a + b


# 用来测试
if __name__ == '__main__':
    result = add(12, 22)
    print("in testmodule.py file, 12+22=%d" % result)

此时如果其他py文件中引用了此文件,如:

import testmodule as tm
result = tm.add(11,22)
print(result)

输出结果:
33

五.Python中的包

  • 为了组织好模块,通常把多个模块放在一个包里面。包是Python模块文件所在的目录,且该目录下必须存在__init__.py文件。
    在这里插入图片描述此时如果main.py想要引用package_a中的模块module_a1,可以使用
    from package_a import module_a1
    或者
    import package_a.module_a1

  • 如果package_a中的模块module_a1想要引入另一个包package_b,则Python默认是找不到的。除非在package_a包的__init__.py文件中添加"sys.path.append(’…/’)"这句代码,并且在package_a包中所有模块都增加"import init"这句代码。

六.模块的发布

  • 模块编写好之后,可以将其打包成可以安装的压缩包进行发布,以分享给其他开发人员。具体步骤如下:
    (1)将要发布的包放在和setup.py文件同级的目录中。
    (2)编辑setup.py文件,在该文件中指明需要包含哪些py文件。
    (3)在当前路径下打开命令行窗口,使用build命令构建模块。
    执行命令后,会在当前目录下新建一个build文件夹,该文件夹下的lib目录中存放了所有待发布模块的备份。
    (4)使用sdist命令生成用于发布的压缩包。
    执行命令后,在当前目录的dist目录下生成了最终发布的压缩包。

七.模块的安装

  • 当程序需要引入一些外部模块时,可以从外部下载并安装。有些模块提供了自动安装的文件,直接双击就可以。但是大多数模块没有提供这样的安装方式。
  • 以刚才发布的模块为例,安装步骤为:先找到模块的压缩包,解压。然后执行命令“python setup.py install“进行安装。
  • 可以对安装的目录进行设定,如python setup.py install --prefix=安装路径

八.常用的标准模块

时间模块:time
日历模块:calendar
日期时间模块:datetime
随机模块:random
数学模块:math、cmath

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值