前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python教程(17)——python模块是什么?python模块详解

Python教程(17)——python模块是什么?python模块详解

作者头像
一点sir
发布2024-01-10 16:36:57
1130
发布2024-01-10 16:36:57
举报
文章被收录于专栏:python教程python教程

Python模块简介

模块是一个包含了Python定义和语句的文件,可用于将功能组织成可重用和可维护的代码块。每个Python文件都可以作为一个模块,模块可以包含变量、函数、类或可执行代码。通过使用模块,我们可以将代码分离成逻辑单元,促进模块化编程。所以我们可以简单的理解为,一个py文件就是一个模块,大部分情况都是这样的。

使用Python模块

在Python中,要想使用Python模块,我们必须要将模块导入,这里可以使用import关键字。

导入整个模块

代码语言:javascript
复制
import module_name

这种方式会导入整个模块,你可以使用module_name来访问其中的函数、变量和类。例如,要导入math模块:

代码语言:javascript
复制
import math

result = math.sqrt(16)
print(result)  # 输出:4.0

导入特定对象

代码语言:javascript
复制
from module_name import object_name

这种方式会导入指定的函数、变量或类,你可以直接使用该对象而不需要加上模块名。例如,要仅导入math模块中的sqrt函数:

代码语言:javascript
复制
from math import sqrt

result = sqrt(16)
print(result)  # 输出:4.0

使用别名导入

代码语言:javascript
复制
import module_name as alias_name

这种方式可以给导入的模块指定一个别名,方便使用。例如,要将datetime模块导入并命名为dt:

代码语言:javascript
复制
import datetime as dt

now = dt.datetime.now()
print(now)  # 输出当前的日期和时间

此外,还可以使用from module_name import *的形式导入模块中的所有对象。但是不推荐这种方式,因为它会导入模块中的所有对象,可能造成命名冲突或意外的行为。最好的做法是显式导入需要使用的对象。

寻找路径的顺序

需要注意的是,Python会按照一定的搜索路径来查找模块,其中包括当前目录、Python标准库的安装目录以及其他已添加的路径。如果要导入自定义的模块或第三方模块,需要将其所在的路径添加到系统的搜索路径中。 比如当前目录中有个math.py文件,自己的文件是main.py

代码语言:javascript
复制
my_project/
├── main.py
└── math.py

math.py的文件内容

代码语言:javascript
复制
print("this is math module")

main.py的文件内容

代码语言:javascript
复制
import math
# 使用math模块中的函数和常量
result = math.sqrt(25)
print(result)  

按正常来说,这个应该输出5的,当时如果你运行main.py会发现,发生了异常。

代码语言:javascript
复制
# python main.py 
this is math module
Traceback (most recent call last):
  File "/root/main.py", line 4, in <module>
    result = math.sqrt(25)
AttributeError: module 'math' has no attribute 'sqrt'

这是因为导入模块的时候,最先是在当前目录下查找,如果找到了,就直接用当前目录的模块,上面main.py中导入了math模块,而当前目录下刚好有一个math.py,所以就被导入了,但是这个文件中又没有sqrt方法,所以就报错了。所以在导入模块的时候一定要注意这种情况。

__all__特殊用法

前面我们说到了,from module_name import *的形式会导入模块中的所有对象,但是通过加入__all__变量的方式可以方便的选择导入的对象。

__all__是一个特殊的变量,用于定义模块的公共接口。在Python中,可以在模块中定义__all__变量,并将其设置为一个包含模块中所有公共对象名称的列表。这样当使用from module import *语句导入模块时,只有__all__列表中列出的对象才会被导入,而其他未列出的对象将不会被导入。

代码语言:javascript
复制
# mymodule.py

__all__ = ['func1', 'func2']

def func1():
    pass

def func2():
    pass

def _private_func():
    pass

mymodule.py模块定义了两个公共函数func1()func2()以及一个私有函数_private_func()。通过将__all__设置为只包含func1()func2()的列表,只能从该模块中导入这两个函数,而不能导入其他函数或变量。

使用示例:

代码语言:javascript
复制
from mymodule import *

print(func1())  # 输出:<function func1 at 0x7f8c6d3a4b50>
print(func2())  # 输出:<function func2 at 0x7f8c6d3a4b90>
print(_private_func)  # 报错:NameError: name '_private_func' is not defined

我们使用from mymodule import *语句导入了mymodule模块中的所有公共对象。可以看到,只有func1()func2()被成功导入,而私有函数_private_func()没有被导入。如果尝试访问未导入的私有函数,将会引发NameError异常。

导入第三方模块

所谓第三方模块就是非python标准库的包,使用的时候需要通过pip的方式来安装,安装完之后使用方法和上面的完全一样。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python模块简介
  • 使用Python模块
    • 导入整个模块
      • 导入特定对象
        • 使用别名导入
          • 寻找路径的顺序
          • __all__特殊用法
          • 导入第三方模块
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档