首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

Python模块简介

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

使用Python模块

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

导入整个模块

import module_name

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

import math

result = math.sqrt(16)

print(result) # 输出:4.0

导入特定对象

from module_name import object_name

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

from math import sqrt

result = sqrt(16)

print(result) # 输出:4.0

使用别名导入

import module_name as alias_name

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

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

寻找路径的顺序

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

比如当前目录中有个math.py文件,自己的文件是main.py

my_project/

├── main.py

└── math.py

math.py的文件内容

print("this is math module")

main.py的文件内容

import math

# 使用math模块中的函数和常量

result = math.sqrt(25)

print(result)

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

# python main.py

this is math module

Traceback (most recent call last):

File "/root/main.py", line 4, in

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__列表中列出的对象才会被导入,而其他未列出的对象将不会被导入。

# mymodule.py

__all__ = ['func1', 'func2']

def func1():

pass

def func2():

pass

def _private_func():

pass

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

使用示例:

from mymodule import *

print(func1()) # 输出:

print(func2()) # 输出:

print(_private_func) # 报错:NameError: name '_private_func' is not defined

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

导入第三方模块

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Od0okUBVRZnnBeeVCWF7LsHw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券