我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python 模块定义、导入、优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python 模块定义、导入、优化

模块:

在Python中,一个.py文件就称之为一个模块(Module)。

它是实现了某个功能的代码集合。


模块分为三种:


1.自定义模块

2.内置标准模块(又称标准库)

3.开源模块


模块导入方法:

1. import module_name (导入一个模块)

2. import module_name,module2_name (导入多个模块)

3. from module_name import * (不推荐使用)

4. from module_name import m1 as name_m1 (导入指定的函数或变量并重命名)

5. from module_name import m1,m2,m3 (导入模块的多个函数或变量)


第3种办法,不推荐使用。因为这一段话,相当于把module_name.py的所有代码复制到当前代码中,调用的时候,直接写方法名调用,不需要module_name.方法名()这种方式调用。如果发现方法名或者变量冲突,以本代码为准。


import的本质

把导入模块的所有代码解释一遍,统一赋值给一个变量,这个变量名叫模块名。

调用变量,使用 module_name.变量名

调用函数,使用 module_name.函数名()


from的本质

把导入模块的指定函数或者变量,放到当前文件的位置,执行一遍。

调用变量或者函数的时候,直接使用即可,不需要在前面加模块名。


自定义一个模块

新建文件hello.py

name = "zhang"
def say_hello():
    print("hello,",name)

新建文件test.py,导入模块。注意,模块名是去除.py之后的名字

import hello
#输出变量,执行方法
print(hello.name)
hello.say_hello()

执行输出

zhang

hello, zhang


包:

用来从逻辑上组织模块,本质就是一个目录(必须带有一个__init__.py文件)


导入包的本质:

去执行包目录下的__init__.py文件


使用pycharm编辑器,新建一个包package_test

编辑__init__.py文件

print('from the package package_test')

新建一个文件p_test.py

import package_test

目录结构如下:

.
├── p_test.py
└── package_test
    └── __init__.py

执行p_test.py,输出

from the package package_test


上面介绍的模块导入,都是基于同级目录的。那么module在不同目录下,该如何导入呢?

目录结构如下:

.
├── hello.py
└── package_test
    ├── __init__.py
    └── main.py

main.py需要导入hello模块


先来分析一个导入模块的执行步骤

import module_name->找到module_name.py文件->找到module_name.py的路径->sys.path(搜索路径)

编辑main.py,打印sys.path

import sys
print(sys.path)

使用cmd执行,执行输出

['E:\\python_script\\day5\\package_test', 'C:\\Program Files\\Python36\\python36.zip', 'C:\\Program Files\\Python36\\DLLs', 'C:\\Program Files\\Python36\\lib', 'C:\

\Program Files\\Python36', 'C:\\Program Files\\Python36\\lib\\site-packages']

第一个元素,就是当前路径

如果一个元素找不到,就会找下一个元素,直到所有的目录都还找不到的话,就报错

ModuleNotFoundError: No module named 'xxx'


为了解决这个问题,需要加一个路径,必须要包含需要导入模块的路径。这个路径,一般为项目根目录。

编辑main.py,先来打印当前文件的绝对路径

import sys,os
print(os.path.abspath(__file__))

执行输出

E:\python_script\day5\package_test\main.py


然后获取当前目录

import sys,os
print(os.path.dirname(os.path.abspath(__file__)))

执行输出

E:\python_script\day5\package_test


最后获取上一层目录,定义变量

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)

执行输出

E:\python_script\day5

这个目录,就可以找到package_test路径了!


将项目根目录添加到系统环境变量中

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

最后导入模块,执行函数

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

import hello

hello.say_hello()

执行输出

hello, zhang


注意:

sys.path.append(BASE_DIR) 是将项目根目录追加到最后一个列表元素。如果中间某一个元素,正好找到了指定文件,比如hello.py,那么就不会再查找后面的路径了,直接加载。

如果出现了这种情况,必须要把BASE_DIR插入到第一个元素位置,使用insert方法


sys.path.insert(0,BASE_DIR)
print(sys.path)

执行输出

['E:\\python_script\\day5', 'E:\\python_script\\day5\\package_test', 'E:\\python_script', 'C:\\Program Files\\Python36\\python36.zip', 'C:\\Program Files\\Python36\\DLLs', 'C:\\Program Files\\Python36\\lib', 'C:\\Program Files\\Python36', 'C:\\Program Files\\Python36\\lib\\site-packages']


举另外一个例子

main.py需要调用test1.py里面的函数,目录结果如下:

.
├── module_test
│   └── main.py
└── package_test
    ├── __init__.py
    └── test1.py

test1.py内容如下:

def test():
    print('in the test1')


main.py直接引用package_test包,是否可以执行呢?

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

import package_test

package_test.test1.test()

执行报错

ModuleNotFoundError: No module named 'test1'


因为import package_test 这一步是执行package_test目录下的__init__.py文件,而这个文件是空的

修改__init__.py文件,从当前目录下,导入test1模块

这个 点 表示相对于__init__.py文件的路径。

from . import test1

再次执行main.py

执行输出

in the test1


再深层次的目录调用,目录结果如下:

python_script/
├── day4
│   └── test.py
└── day5
    └── package_test
        ├── __init__.py
        └── test1.py

day5的代码,同上,没改动

test.py需要调用test1.py,那么需要把python_script目录加到环境变量即可


修改day4下的test.py文件

import sys,os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR)

执行输出

E:\python_script


加载到环境变量

import sys,os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

from day5 import package_test
package_test.test1.test()

执行输出

in the test1


注意下面这行代码

from day5 import package_test

day5表示python_script目录下的day5


导入优化

语法:

from 模块名 import 函数或变量名


举个例子,目录结构如下:

test4/
├── module_test.py
└── test.py

module_test.py内容如下:

def test():
    print('in the test')

test.py内容如下:

import module_test

def logger():
    module_test.test()
    print('in the logger')

def search():
    module_test.test()
    print('in the search')

#假设有N个函数在调用module_test.test()
#...
logger()

执行输出

in the test

in the logger


module_test.test()在执行的时候,先找到module_test模块,再从里面检索test函数是否存在。

那么每执行一次,就要先找模块,再找函数,重复劳动,效率很低。


为了解决这个问题,就是在导入模块的时候,不让它找就可以了

import module_test

改成

from module_test import test

就可以了。


下面的执行方法module_test.test()改成test() 就可以了,完整代码如下

#!/usr/bin/env python
# coding: utf-8
__author__ = 'www.py3study.com'

from module_test import test

def logger():
    test()
    print('in the logger')

def search():
    test()
    print('in the search')

#....

logger()

执行输出

in the test

in the logger


这种方法,可以使代码执行的更快

为了避免函数重名,可以在导入的时候,起别名

from module_test import test as mod_test


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python 模块定义、导入、优化

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

下载Word文档

猜你喜欢

python 模块定义、导入、优化

模块:在Python中,一个.py文件就称之为一个模块(Module)。它是实现了某个功能的代码集合。模块分为三种:1.自定义模块2.内置标准模块(又称标准库)3.开源模块模块导入方法:1. import module_name (导入一个
2023-01-30

python导入自定义模块

>>> import sys>>> print sys.path['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux
2023-01-31

python模块导入速度怎么优化

要优化Python模块的导入速度,可以考虑以下几个方面:1. 使用合适的导入方式:在导入模块时,可以选择使用import语句或者from-import语句。一般来说,使用import语句会比from-import语句更快,因为from-im
2023-08-15

python导入自定义模块的方法是什么

要导入自定义模块,可以使用以下方法:1. 在同一目录下导入模块:- 将自定义模块文件(.py文件)放在与主程序(调用模块的脚本)相同的目录下。- 使用`import`关键字导入模块,例如:`import module_name`2. 在不同
2023-08-29

python 包(模块 函数 类 定义 导入)使用详解

这篇文章主要为大家介绍了python 包(模块 函数 类 定义 导入)的使用详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-24

python模块导入

[seemmo@RegionServer1 duwen]$ pythonPython 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) [GCC 4.4.7 20120313 (Red Hat 4.4.7-
2023-01-31

Python中导入自定义模块的几种方法总结

这篇文章主要介绍了Python中导入自定义模块的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-04

Python 之模块导入

Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,如果想要使用模块,则需要导入。导入模块有一下几种方法:import modulefrom module.xx.xx import xxfrom mod
2023-01-31

python--自定义模块

python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),多个 .py 文件组
2023-01-30

pycharm无法导入自定义模块怎么解决

如果在PyCharm中无法导入自定义模块,可以尝试以下解决方法:1. 确保自定义模块的路径正确:首先要确保自定义模块在PyCharm的Python环境中可以找到。可以在PyCharm中打开Python Console,然后尝试使用`impo
2023-10-12

python—模块导入和类

1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7In [2]: sys.pathOut[2]:['','/usr/bin','/usr/lib64/python2.7/site-packa
2023-01-31

python-自定义模块mylog

在编写程序中添加一大堆的代码就不是那么愉快的事情,好在python有强大的import,完全可以先配置好一个mylog.py,以后需要使用时直接导入mylog.py模块即可编写mylog.py,代码如下#!/usr/bin/envpytho
2023-01-30

python模块导入细节

官方手册:https://docs.python.org/3/tutorial/modules.html可执行文件和模块python源代码文件按照功能可以分为两种类型:用于执行的可执行程序文件不用与执行,仅用于被其它python源码文件导入
2023-01-30

python导入模块--import--2

调用之前写的彩色打印,写个简单的脚本testimport.py实验下在跟之前test_import_color_print.py同级目录下创建testimport.py文件,不然导模块会有问题代码如下#!/usr/bin/python#co
2023-01-30

python导入模块--import--1

python前面写的程序,后面就可以将它当成一个模块导入,取其精华舍弃不用的随意使用,最理想的情况是任何一个功能,只要写一次,以后所有人都可以任意调用,代码重用性高的可怕,而且python还可以根据需求将C,C++,Java等程序作为模块,
2023-01-30

Python怎么导入模块

这篇文章主要讲解了“Python怎么导入模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么导入模块”吧!常规导入常规导入应该是最常使用的导入方式,大概是这样的:import
2023-06-16

Jupyter导入自定义模块及导入后TypeError错误问题及解决

这篇文章主要介绍了Jupyter导入自定义模块及导入后TypeError错误问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-04

Python Logging 模块高级指南:自定义和优化日志记录

深入了解 Python Logging 模块,探索高级自定义和优化技巧,以实现全面且高效的日志记录解决方案。
Python Logging 模块高级指南:自定义和优化日志记录
2024-02-20

python导入模块的步骤

这篇文章主要介绍“python导入模块的步骤”,在日常操作中,相信很多人在python导入模块的步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python导入模块的步骤”的疑惑有所帮助!接下来,请跟着小编
2023-06-20

python如何导入sklearn模块

要导入sklearn模块,可以使用以下代码:from sklearn import 模块名或者可以导入具体的子模块或函数:from sklearn.模块名 import 子模块名或函数名例如,要导入sklearn的线性回归模型,可以使用
python如何导入sklearn模块
2024-02-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录