广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何实现模块和加载模块
  • 528
分享到

Python如何实现模块和加载模块

2023-06-08 00:06:43 528人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍python如何实现模块和加载模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入

这篇文章主要介绍python如何实现模块和加载模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Python可以做什么

Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析人工智能web开发等。

一.导入模块

模块(Modules)

模块就是Python程序,任何Python程序都可以作为模块

代码的可重用性,只要编程过程中需要用到该模块中的某个功能(由变量、函数、类实现),直接在程序中导入该模块即可使用该功能

封装特性的结构:

诸多容器,列表、元组、字符串、字典等都是对数据的封装
函数是对 Python 代码的封装
类是对方法和属性的封装,是对函数和数据的封装

模块,可以理解是对代码更高级的封装,把能够实现某一特定功能的代码编写在同一个.py 文件中,并将其作为一个独立的模块,还能有效避免函数名和变量名发生冲突

当程序重复导入同一个模块时,Python 只会导入一次

import

import 模块名1 [as 别名1], 模块名2 [as 别名2],…

会导入指定模块中的所有成员(包括变量、函数、类等),需要使用模块中的成员时,需用该模块名(别名)作为前缀,否则解释器会报错

[] 部分,可以使用,也可以省略

sys模块下的argv变量用于获取运行程序的命令行参数,argv[0]用于获取当前 程序的存储路径

import sys #导入sys整个模块print(sys.argv[0]) # 用sys模块内的成员时,必须添加模块名作为前缀C:/Users/Administrator/Desktop/2021-1-14/模块.py

导入整个模块时,可以为模块指定别名

import sys as s # 导入sys整个模块,指定别名为sprint(s.argv[0]) # 使用sys模块别名s作为前缀来访问模块中的成员C:/Users/Administrator/Desktop/2021-1-14/模块.py

可以一次导入多个模块,多个模块之间用逗号隔开

import sys,os # 导入sys、os两个模块print(sys.argv[0]) # 使用模块名作为前缀来访问模块中的成员print(os.sep) # os模块的sep变量代表平台上的路径分隔符C:/Users/Administrator/Desktop/2021-1-14/模块.py\

导入多个模块时,也可以为模块指定别名

import sys as s,os as o # 导入模块,并分别为模块指定别名print(s.argv[0]) # 使用模块别名作为前缀来访问模块中的成员print(o.sep)C:/Users/Administrator/Desktop/2021-1-14/模块.py\

from…import

from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…

只会导入模块中指定的成员,而不是全部成员,当程序中使用该成员时,无需加任何前缀,直接使用成员名(或别名)

[] 部分,可以使用,也可以省略

用from...import来导入指定成员

from sys import argv # 导入sys模块的argv成员print(argv[0]) # 直接使用成员名访问C:/Users/Administrator/Desktop/2021-1-14/模块.py

导入sys模块中的 argv 成员,可在程序中直接使用 argv 成员,无须使用任何前缀

导入模块成员时,为成员指定别名

from sys import argv as v # 导入sys模块的argv成员,为其指定别名vprint(v[0]) # 直接使用成员的别名访问C:/Users/Administrator/Desktop/2021-1-14/模块.py

fORM...import 导入模块成员时,可一次导入多个成员

from sys import argv, winver # 导入sys模块的argv,winver成员print(argv[0]) # 直接使用成员名访问print(winver)C:/Users/Administrator/Desktop/2021-1-14/模块.py3.4

sys模块的winver成员记录了该 Python 的版本号

一次导入多个模块成员时,可使用 as 关键字为成员指定别名

from sys import argv as v, winver as wv # 导入sys模块的成员,并为其指定别名print(v[0]) # 直接使用成员的别名访问print(wv)C:/Users/Administrator/Desktop/2021-1-14/模块.py3.4

不推荐使用 from 模块 import * 导入模块所有成员

导入指定模块内的所有成员存在潜在的风险,可能会出现同名成员

可通过别名来区分两个模块中的同名成员

__import __()

模块是代码文件,要求其文件名要符合操作系统的命名规则,如果模块名中出现空格或数字开头,无法使用 import 引入

如果模块中包含空格或以数字开头,需要使用__import__() 内置函数引入模块

__import__("demo text")__import__("1demo")

使用import()函数要以字符串的方式将模块名引入,否则会报SyntaxError错误

二.自定义模块

定义简单的模块(编写在 demo.py 文件中)

name = "youchanwill"add = "you.com"print(name,add)def say(): print("自定义模块")class test: def __init__(self,name,add):  self.name = name  self.add = add def say(self):  print(self.name,self.add)

为了检验模板中代码的正确性,需要为其设计一段测试代码

say()test1 = test("you","you.net")test1.say()

在同一文件夹下新建一个test.py文件,使用 import 语句导入 demo.py

import demo #用import 语句导入时,只需要使用该模板文件的名称youchanwill you.com自定义模块 #测试代码也被执行you you.net

其它程序以引入的方式执行模板文件,测试代码不应该被执行,可用__name__ 变量做修改

当直接运行一个模块时,__name__变量的值为__main__,而模块被导入其他程序中并运行该程序时,处于模块中的__name__变量的值就变成了模块名

可在调用测试函数时增加判断,当 __name__ =='__main__' 时才调用测试函数

修改 demo.py 模板文件中的测试代码:

if __name__ == '__main__': say() test1 = test("you","you.net") test1.say()

修改后运行 test.py 文件时

import demoyouchanwill you.com

执行的是模板文件中的输出语句,测试代码并未执行

说明文档

自定义模块添加说明文档,和函数或类的添加方法相同,在模块开头的位置定义一个字符串

可以通过模板的 __doc__ 属性,来访问模板的说明文档

import demoprint(demo.__doc__)youchanwill you.com

这是说明文档

三.加载模块

环境变量

根据PYTHONPATH环境变量的值来确定到哪里去加载模块

PYTHONPATH环境变量的值是多个路径的集合,会依次搜索PYTHONPATH 环境变量所指定的多个路径,从中找到程序想要加载的模块

windows 平台上设置环境变量

右击桌面上的“计算机”图标,单击“属性”菜单项,系统显示“控制面板\所有控制面板项\系统”窗口,单击该窗口左边栏中的“高级系统设置”链接,出现“系统属性”对话框

Python如何实现模块和加载模块

单击“高级” Tab 页中的“环境变量”,对于当前用户而言,设置用户变量和系统变量的效果大致相同,系统变量的路径排在用户变量的路径之前

Python如何实现模块和加载模块

在“变量名”内输入 PYTHONPATH,表明将要建立 的环境变量;在“变量值”内输入 .;d:\python_ module,就是该环境变量的值,该值包含两条路径

第一条路径为一个点(.),代表当前路径,表明当运行 Python 程序时,总能从当前路径加载模块

第二条路径为 d:\python_ module,表明当运行 Python 程序时,总能从 d:\python_ module 加载模块

成功设置了环境变量后,只要把定义的模块放在与当前运行程序相同的路径(或d:\python_ module 路径),该模块就能被成功加载

linux 上设置环境变量

启动 Linux 的命令行界面,在 home 路径下输入:

ls - a

Linux 平台的环境变量通过 .bash_profile 文件设置,在该文件中添加 PYTHONPATH 环境变量

PYTHONPATH=.:/home/you/python_module #you是系统的登录名

Linux 多个路径之间以冒号(:)作为分隔符

完成变量值的设置后,在 .bash_profile 文件的最后添加导出 PYTHONPATH 变量的语句

export PYTHONPATH

运行该文件,使在文件中设置的 PYTHONPATH 变量值生效

可选择重新登录Linux 平台,或输入source .bash_profile

成功设置了环境变量后,只要把定义的模块放在与当前运行程序相同的路径(或/home/yeeku/python_module 路径),该模块就能被成功加载

默认的模块加载路径

安装通用性模块,这种模块应该直接安装在 Python 内部,可借助Python默认的模块加载路径

通常情况下,应将Python的扩展模块添加在 lib\site-packages 路径下,专门用于存放扩展模块和包

将之前的demo.py文件复制在 lib\site-packages 路径下

'''这是说明文档'''name = "youchanwill"add = "you.com"print(name,add)def say(): print("自定义模块")class test: def __init__(self,name,add):  self.name = name  self.add = add def say(self):  print(self.name,self.add)if __name__ == '__main__': say() test1 = test("you","you.net") test1.say()

可直接在Python交互式解释器中测试该模块

>>> import demoyouchanwill you.com>>> print(demo.__doc__)

这是说明文档

>>>
第一行代码用于导入demo模块;第二行代码用于查看demo模块的文档,输出该模块开始定义的文档内容

导入模块的本质

import demo 导入模块的本质是将 demo.py 中的全部代码加载到内存并执行
将整个模块内容赋值给与模块同名的变量,该变量的类型是 module,在该模块中定义的所有程序单元都相当于该 module 对象的成员

from demo import name 导入模块中成员的本质是将 demo.py 中的全部代码加载到内存并执行
只导入指定变量、函数等成员单元,不会将整个模块导入

在导入模块后,在模块文件所在目录下看到一个名为“__pycache__”的文件夹
Python 为每个模块都生成一个 *.cpython-36.pyc 文件,该文件是为模块编译生成的字节码,用于提升该模块的运行效率

四.__all__变量

向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线、双下划线)开头的变量、函数和类

如果不想模块文件中的某个成员被引入到其它文件中使用,可以在其名称前添加下划线

新建demo.py文件

def test1(): print("you")def test2(): print("chan")def test3(): print("will")

在新建的test.py文件中导入

from demo import *test1()test2()test3()youchanwill

如果 demo.py 模块中的 test1() 函数不想让其它文件引入,只需将其名称改为 _test1() 或者 __test1()

def _test1(): print("you")NameError: name 'test1' is not defined

__all__ 变量,该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称

通过在模块文件中设置 __all__ 变量,当其它文件以“from 模块名 import *”的形式导入该模块时,该文件中只能使用 __all__ 列表中指定的成员

只有以“from 模块名 import *”形式导入的模块,当该模块设有 __all__ 变量时,只能导入该变量指定的成员,未指定的成员无法导入

def test1(): print("you")def test2(): print("chan")def test3(): print("will")__all__ = ["test1","test2"]from demo import *test1()test2()test3()youchanNameError: name 'test3' is not defined

__all__ 变量仅限于在其它文件中以“from 模块名 import *”的方式引入

import 模块名 的形式导入模块,可以通过模块名前缀(别名)来调用模块内的所有成员(除了以下划线开头命名的成员),__all__变量的设置无效

from 模块名 import 成员 导入指定成员,__all__变量的设置无用

以上是“Python如何实现模块和加载模块”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网Python频道!

--结束END--

本文标题: Python如何实现模块和加载模块

本文链接: https://www.lsjlt.com/news/250520.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何实现模块和加载模块
    这篇文章主要介绍Python如何实现模块和加载模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入...
    99+
    2023-06-08
  • Python 重新加载模块
    在进行模块化编程时,经常会遇到这样一种场景: 编写了一个 Python 模块,并用 import my_module 的形式进行导入。当对该模块进行更改后,即使重新导入,其中的任何改变都不会被识别,这使得模块调试变得非常困难。...
    99+
    2023-01-31
    模块 加载 Python
  • pycharm如何加载模块
    要在PyCharm中加载模块,可以按照以下步骤操作:1. 打开PyCharm,并打开您的Python项目。2. 在项目文件夹中创建一...
    99+
    2023-08-15
    pycharm
  • 如何使用Python加载npm和git模块?
    Python作为一种高效、易用、灵活的编程语言,已经成为了众多开发者的首选。在很多项目中,我们需要用到npm和git这两个模块,而Python作为一种多功能的语言,也可以轻松地加载这些模块。本文将会介绍如何使用Python加载npm和git...
    99+
    2023-07-24
    load npm git
  • python中动态加载模块和类方法实现
    python中动态加载模块和类方法实现测试代码   文件名: mytest.py 具体代码如下:   注意:模块名,类名,方法名都是变量。   #coding=UTF-8 class TestClass: def sub(se...
    99+
    2023-01-31
    模块 加载 方法
  • Angular中NgModule模块和延迟加载模块的用法
    这篇文章主要介绍“Angular中NgModule模块和延迟加载模块的用法”,在日常操作中,相信很多人在Angular中NgModule模块和延迟加载模块的用法问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2022-10-19
  • Python重新加载模块方法
    为防止两个模块互相导入的问题,Python默认所有的模块都只导入一次,如果需要重新导入模块,Python2.7可以直接用reload(),Python3可以用下面几种方法: 方法一:基本方法from imp import reloadre...
    99+
    2023-01-31
    模块 加载 方法
  • OrchardCore 如何动态加载模块
    这篇文章主要讲解了“OrchardCore 如何动态加载模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“OrchardCore 如何动态加载模块”吧!Or...
    99+
    2022-10-19
  • ubuntu如何禁止模块加载
    ubuntu禁止模块加载的示例:例如禁止PHP模块,通过终端命令行实现。使用phpdismod命令从系统中禁用任何不必要的php模块。$ phpdismod mbstring //对所有PHP版本和所有SAPI禁用mbstring模块。禁用...
    99+
    2022-10-21
  • springboot如何实现多模块项目添加一新模块
    这篇文章主要介绍了springboot如何实现多模块项目添加一新模块,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot多模块项目添加一新模块选择Maven M...
    99+
    2023-06-29
  • Python中怎么实现模块重载
    本篇文章为大家展示了Python中怎么实现模块重载,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。环境准备新建一个 foo 文件夹,其下包含一个 bar.py 文件$ tree f...
    99+
    2023-06-16
  • python动态加载模块、类、函数
    动态加载模块: 方式1:系统函数__import__() 方式2:imp, importlib 模块 方式3:exec 函数 动态加载类和函数 首先,使用加载模块,使用内置函数提供的反射方法getattr(),依次按照层级...
    99+
    2023-01-31
    函数 模块 加载
  • springboot实现多模块项目添加一新模块
    目录springboot多模块项目添加一新模块springboot添加新模块的方法springboot项目基本结构如图一、选择file->projectstructure文件-...
    99+
    2022-11-13
  • 从Python开始:如何快速加载npm和git模块?
    Python是一种广泛使用的编程语言,而npm和git则是两个非常重要的模块,它们可以帮助你更高效地管理和共享代码。在本文中,我们将探讨如何在Python中快速加载npm和git模块,并且分享一些实用的代码示例。 安装npm和git ...
    99+
    2023-07-24
    load npm git
  • Python paramiko模块(实现
    开发堡垒机之前,先来学习Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作 安装paramiko模块 pip3 install paramiko 基于用户密码方式 import paramiko # 创建...
    99+
    2023-01-31
    模块 Python paramiko
  • 如何在Django容器中快速加载Python模块?
    Django是一种流行的Web框架,它能够让Python开发者轻松地构建Web应用程序。然而,在使用Django构建应用程序时,有时需要加载许多Python模块,这可能会导致加载时间变慢,从而影响应用程序的性能。在本文中,我们将介绍如何在D...
    99+
    2023-08-24
    容器 load django
  • Angular实现预加载延迟模块的方法
    Angular实现预加载延迟模块的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!在使用路由延迟加载中,我们介绍了如何使...
    99+
    2022-10-18
  • Python3 加密(hashlib和hmac)模块的实现
    以下代码以Python3.6.1为例 hashlib : 不可逆加密 hmac : 不可逆键值对方式加密 hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure H...
    99+
    2022-06-04
    模块 hashlib hmac
  • Python利用filestools模块实现水印添加
    在前面的文章中很早有写到关于添加水印的方法,但是过程还是较为复杂,最近发现的这款filestools非标准库其实真正实现添加水印的只要一个函数的调用,一行代码即可完成水印的添加。 通...
    99+
    2022-11-11
  • 如何在Django容器中正确地加载Python模块?
    Django是一个Python Web框架,它提供了一个简单易用的方式来构建Web应用程序。然而,在Django容器中正确地加载Python模块并不是一件容易的事情。在本文中,我们将介绍如何在Django容器中正确地加载Python模块。 ...
    99+
    2023-08-24
    容器 load django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作