Python中import的机制详解

简介: Python中import的机制详解

2.导入方法
复制代码

导入一个模块

import model_name

导入多个模块

import module_name1,module_name2

导入模块中的指定的属性、方法(不加括号)、类

from moudule_name import moudule_element [as new_name]
复制代码
方法使用别名时,使用"new_name()"调用函数,文件中可以再定义"module_element()"函数。

3.import本质(路径搜索和搜索路径)
moudel_name.py

复制代码

-- coding:utf-8 --

print("This is module_name.py")

name = 'Hello'

def hello():
print("Hello")
复制代码
module_test01.py

复制代码

-- coding:utf-8 --

import module_name
//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg0ODk1Mg==.html

print("This is module_test01.py")
print(type(module_name))
print(module_name)

复制代码
复制代码
运行结果:
E:\PythonImport>python module_test01.py
This is module_name.py
This is module_test01.py


复制代码
在导入模块的时候,模块所在文件夹会自动生成一个pycache\module_name.cpython-35.pyc文件。

"import module_name" 的本质是将"module_name.py"中的全部代码加载到内存并赋值给与模块同名的变量写在当前文件中,这个变量的类型是'module';

module_test02.py

-- coding:utf-8 --

from module_name import name

print(name)
运行结果;
E:\PythonImport>python module_test02.py
This is module_name.py
Hello
"from module_name import name" 的本质是导入指定的变量或方法到当前文件中。

package_name / init.py

-- coding:utf-8 --

print("This is package_name.init.py")
module_test03.py

-- coding:utf-8 --

import package_name

print("This is module_test03.py")
运行结果:
E:\PythonImport>python module_test03.py
This is package_name.init.py
This is module_test03.py
"import package_name"导入包的本质就是执行该包下的init.py文件,在执行文件后,会在"package_name"目录下生成一个"pycache / init.cpython-35.pyc" 文件。

package_name / hello.py

-- coding:utf-8 --

print("Hello World")
package_name / init.py

-- coding:utf-8 --

init.py文件导入"package_name"中的"hello"模块

from . import hello
print("This is package_name.init.py")
运行结果:
E:\PythonImport>python module_test03.py
Hello World
//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg0NzY0NA==.html

This is package_name.init.py
This is module_test03.py
在模块导入的时候,默认现在当前目录下查找,然后再在系统中查找。系统查找的范围是:sys.path下的所有路径,按顺序查找。

4.导入优化
module_test04.py

复制代码

-- coding:utf-8 --

import module_name

def a():
module_name.hello()
print("fun a")

def b():
module_name.hello()
print("fun b")

a()
b()
复制代码
复制代码
运行结果:
E:\PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b
复制代码
多个函数需要重复调用同一个模块的同一个方法,每次调用需要重复查找模块。所以可以做以下优化:

module_test05.py

复制代码

-- coding:utf-8 --

from module_name import hello

def a():
hello()
print("fun a")

def b():
hello()
print("fun b")

a()
b()
复制代码
复制代码
运行结果:
E:\PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b
复制代码
可以使用"from module_name import hello"进行优化,减少了查找的过程。

相关文章
|
10天前
|
测试技术 API 数据库
Python反射机制在实际场景中的应用
Python 的反射机制是指在运行时动态地访问、检测和修改类和对象的属性和方法。:通过反射机制,可以动态加载和执行插件,无需在代码中硬编码每个插件的具体实现。这样可以实现插件化架构,使系统更加灵活和可扩展。:可以使用反射机制来读取和解析配置文件中的配置项,并动态地应用到程序中。这样可以实现灵活的配置管理,方便根据需要进行配置项的修改和扩展。:在自动化测试框架中,可以利用反射机制动态地加载和执行测试用例,从而实现自动化测试的灵活性和扩展性。
21 2
|
6天前
|
XML 数据格式 Python
Python的`import`用于加载模块,基础形式是`import module`,全量导入
【6月更文挑战第23天】Python的`import`用于加载模块,基础形式是`import module`,全量导入;`from module import name`选择性导入部分,减少命名空间污染;`from module import *`导入所有(不推荐),易引发冲突。别名导入如`from math import sqrt as square_root`可避免冲突。包导入用`.`,如`import xml.etree.ElementTree as ET`。
27 8
|
5天前
|
XML 数据格式 Python
在Python中,导入其他模块是通过使用import语句完成的
在Python中导入模块涉及`import`语句的不同用法:1) `import math`导入整个标准库;2) `from math import sqrt`导入单个函数;3) `import numpy as np`使用别名;4) `from random import *`导入所有(不推荐);5) `import xml.etree.ElementTree as ET`导入子模块;6) 使用`importlib.import_module()`延迟导入;7) `from .module import func`导入相对路径模块,需管理`sys.path`。
27 6
|
3天前
|
存储 数据库 文件存储
Python中实现限定抽奖次数的机制的项目实践
本文介绍了如何在Python中实现限定抽奖次数的机制。通过选择合适的数据结构、设计清晰的逻辑流程以及编写简洁明了的代码,我们可以轻松地实现这一功能。同时,我们还探讨了如何对系统进行扩展和优化,以满足更多的实际需求。希望本文能对新手在开发抽奖系统时有所帮助。
|
6天前
|
XML 数据格式 Python
Python模块导入包括:`import math`导入标准库
【6月更文挑战第23天】Python模块导入包括:`import math`导入标准库,`from math import sqrt`导入单个函数,`import numpy as np`给模块取别名,`from random import *`导入所有(不推荐),`import xml.etree.ElementTree as ET`导入子模块,`import_module('pandas')`按需导入,和使用相对路径如`from .module import func`处理项目结构。记得调整`sys.path`以包含自定义模块路径。
16 4
|
6天前
|
算法 Java 开发者
深入理解Python的内存管理机制
Python 以其简单易学的语法和强大的功能深受开发者欢迎。然而,许多开发者在使用 Python 时并不了解其背后的内存管理机制。本文旨在深入探讨 Python 的内存管理,包括对象的生命周期、引用计数以及垃圾回收机制,从而帮助开发者编写出更加高效和稳定的代码。
|
13天前
|
存储 安全 Java
在Python中,引用和赋值机制是理解变量和数据对象之间关系的关键
【6月更文挑战第16天】Python变量是对象引用,不存储数据,指向内存中的对象。赋值`=`创建引用,不复制对象。`b = a`时,a和b指向同一对象。引用计数管理对象生命周期,垃圾回收在引用数为0时回收对象。理解这些机制对优化内存使用关键。
33 7
|
1月前
|
算法 Java Python
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性。优化包括避免过多临时对象,如优化列表推导式减少对象创建。警惕循环引用造成的内存泄漏,如示例中的Node类。使用`gc`模块检测泄漏,通过`gc.set_debug(gc.DEBUG_LEAK)`和`gc.collect()`获取信息。实践中需持续分析内存使用,优化算法、数据结构和资源释放,以提升程序质量与效率。
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
|
1月前
|
存储 Java 程序员
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性,包括变量存储和垃圾回收。变量存储时,如`x = 10`,`x`指向内存中值的引用。垃圾回收通过引用计数自动回收无引用对象,防止内存泄漏。了解此机制可优化内存使用,避免循环引用等问题,提升程序效率和稳定性。深入学习内存管理对成为优秀Python程序员至关重要。
【Python 的内存管理机制专栏】深入解析 Python 的内存管理机制:从变量到垃圾回收
|
2天前
|
网络架构 Python
python的反射机制
python的反射机制