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"进行优化,减少了查找的过程。

相关文章
|
17天前
|
并行计算 安全 Java
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
91 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
|
28天前
|
缓存 JSON 数据处理
Python进阶:深入理解import机制与importlib的妙用
本文深入解析了Python的`import`机制及其背后的原理,涵盖基本用法、模块缓存、导入搜索路径和导入钩子等内容。通过理解这些机制,开发者可以优化模块加载速度并确保代码的一致性。文章还介绍了`importlib`的强大功能,如动态模块导入、实现插件系统及重新加载模块,展示了如何利用这些特性编写更加灵活和高效的代码。掌握这些知识有助于提升编程技能,充分利用Python的强大功能。
28 4
|
3月前
|
UED 开发者 Python
Python中的异常处理机制
Python中的异常处理机制
59 2
|
3月前
|
监控 Java 开发者
Python的垃圾收集机制有哪些?
Python的垃圾收集机制有哪些?
|
4月前
|
人工智能 文字识别 API
Python反爬机制-验证码(二)
Python反爬机制-验证码(二)
39 1
|
5月前
|
测试技术 数据库 开发者
Python作为一种谦逊的编程语言:对象自省机制的探讨
Python的自省机制是该语言的一个强大特性,为开发者提供了深入了解和操作对象的能力。它增强了Python的灵活性,使得开发者可以更加精准地控制程序的行为。然而,合理利用自省能力,避免其成为代码复杂性的来源,是每个Python开发者需要考虑的问题。通过熟练运用Python提供的自省工具和技巧,可以更好地设计和实现高效、易维护的Python应用。
59 2
|
5月前
|
消息中间件 安全 Kafka
Python IPC机制全攻略:让进程间通信变得像呼吸一样自然
【9月更文挑战第12天】在编程领域,进程间通信(IPC)是连接独立执行单元的关键技术。Python凭借简洁的语法和丰富的库支持,提供了多种IPC方案。本文将对比探讨Python的IPC机制,包括管道与消息队列、套接字与共享内存。管道适用于简单场景,而消息队列更灵活,适合高并发环境。套接字广泛用于网络通信,共享内存则在本地高效传输数据。通过示例代码展示`multiprocessing.Queue`的使用,帮助读者理解IPC的实际应用。希望本文能让你更熟练地选择和运用IPC机制。
92 10
|
4月前
|
文字识别 开发者 iOS开发
Python反爬机制-验证码(一)
Python反爬机制-验证码(一)
50 0
|
5月前
|
开发者 Python
Python 中的 Input 函数及其实现机制
Python 中的 Input 函数及其实现机制
70 0
|
6月前
|
算法 TensorFlow 算法框架/工具
写Python时不用import,你会遭遇什么
写Python时不用import,你会遭遇什么
41 2

热门文章

最新文章