Python中import机制!

python的import详解,史上最细 以前在使用import的时候经常会因为模块的导入而出现一些问题,以及一些似懂非懂半疑惑半糊涂的问题,索性花了点时间研究了一些python引用的方法,并且动手操作试验了一下,深有感触,特留此文以作总结,如有不当之处欢迎评论指正 本文会尽我所能详细描述,字数会比较多,希望各位耐心看完。 首先我觉得应该先了解一下python的引用是怎么引用的 我们首先新建一个python文件demo.py print(dir()) dir()命令是获取到一个object的所有属性,当传值为空时默认传入的是当前py文件 阅读详情

Python语言中import的使用很简单,直接使用import module_name语句导入即可。这里我主要写一下"import"的本质。

Python官方定义:Python code in one module gains access to the code in another module by the process of importing it.

包含编程籽料、学习路线图、源代码、软件安装包等!【点击领取 100%免费!】

1.定义:

模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量、函数、类),本质就是*.py文件。文件是物理上组织方式"module_name.py",模块是逻辑上组织方式"module_name"。

包(package):定义了一个由模块和子包组成的Python应用程序执行环境,本质就是一个有层次的文件目录结构(必须带有一个__init__.py文件)。

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

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
<class 'module'\>
<module 'module\_name' from 'E:\\\\PythonImport\\\\module\_name.py'\>

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

“import module_name” 的本质是将"module_name.py"中的全部代码加载到内存并赋值给与模块同名的变量写在当前文件中,这个变量的类型是’module’;<module ‘module_name’ from ‘E:\\PythonImport\\module_name.py’>


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

5.模块的分类

内建模块

可以通过 “dir(__builtins__)” 查看Python中的内建函数

\>>> dir(\_\_builtins\_\_)
\['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '\_', '\_\_build\_class\_\_', '\_\_debug\_\_', '\_\_doc\_\_', '\_\_import\_\_', '\_\_loader\_\_','\_\_name\_\_', '\_\_package\_\_', '\_\_spec\_\_', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round','set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip'\]

非内建函数需要使用"import"导入。Python中的模块文件在"安装路径\Python\Python35\Lib"目录下。

第三方模块

通过"pip install "命令安装的模块,以及自己在网站上下载的模块。一般第三方模块在"安装路径\Python\Python35\Lib\site-packages"目录下。

最后:关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

在这里插入图片描述

读书笔记:LearningPython第五版 (第三章 如何执行程序) 目录Chap3 How You Run Programs3.1 交互式提示符3.1.1 运行交互式环境3.1.2 Windows新的 启动3.2 System Command Lines and Files Chap3 How You Run Programs 3.1 交互式提示符 3.1.1 运行交互式环境 3.1.2 Windows新的 启动 从Python 3.3 开始,Windows平台上... 阅读详情

相关推荐

深入了解Python的import机制

深入了解Python的import机制 1. 引言 Python中官方的定义为:Python code in one module gain access to the code in another module by the process of importing it. 在平常的使用中,我们一定会使用from xxx import xxx或是import xx这样的导包语句,假如你研究过Python中的包你就会发现,很多包中会包含__init__.py这样的文件,这是为什么呢? 这篇博文中,我

星尘博客_优快云镜像 622

Python 3.x | 史上最详解的 导入(import)

win10+Python 3.6.3 一、理解一些基本概念 1、包、模块 模块 module:一般情况下,是一个以.py为后缀的文件。其他可作为module的文件类型还有”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”,但Python初学者几乎用不到。 module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让cod...

神是念着倒 26万+

Python中PyImport_ImportModule返回null的原因及解决方法

如果指定的路径"/path/to/module"不存在或者没有my_module.py文件,那么PyImport_ImportModule函数会返回null。当模块依赖的其他模块不存在或者没有安装时,PyImport_ImportModule函数也会返回null。当你调用PyImport_ImportModule函数时,如果指定的模块不存在或者无法找到,则会返回null。而你的系统中没有安装numpy模块,那么调用PyImport_ImportModule函数时就会返回null。

. 4404

【python】import的用法总结

import的学习笔记

ting的博客 4万+

import有什么用,python中怎么使用import

import`是Python中重要的关键字,用于引入其他模块或库的功能。通过使用`import`,我们可以重用现有的代码,扩展功能,以及模块化开发。在使用`import`时,我们可以导入整个模块或部分功能,并且可以为导入的模块或功能指定别名。当使用`import`时,需要注意处理可能发生的错误,并遵循一些注意事项,以确保代码的正确性和可维护性。通过合理使用`import`,我们能够更加高效和灵活地开发Python程序。

这家伙很懒,什么都没有留下 4595

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 502

Python模块化编程:import机制剖析!

2. 加载模块:找到文件后,执行其中的顶级代码,创建模块对象并填充其命名空间。已导入的模块会被保存在sys.modules字典中,再次导入时直接返回缓存的模块,提高效率。通过from...import...,我们可以直接导入并使用模块中的特定对象,无需模块名作为前缀。借助setup.py脚本,可以将模块打包为易于安装的Python包(如.whl或.tar.gz),发布到PyPI供全球开发者使用。使用import...as...,我们可以为模块赋予一个别名,如numpy变为np,便于快速引用且减少键入。

简单的编程博客 845

IEC 62061 总结与适用范围

IEC 62061 是国际电工委员会(IEC)制定的。

cactusDaYe的博客 1083

别再只会把import放函数里了!深入Python模块加载机制,从根源上杜绝循环依赖

本文深入解析Python模块加载机制,揭示循环import问题的根源,并提供从临时方案到架构级解决方案的全面指南。通过分析模块初始化过程、典型循环依赖场景,介绍依赖倒置、单一职责等设计原则,以及类型注解延迟求值、工厂模式等高级技巧,帮助开发者从根本上杜绝循环依赖问题。

weixin_30875157的博客 382

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

【机器人】转动的指数坐标表示心得理解

转动的指数坐标表示心得理解1.前言2.指数坐标表示旋转矩阵3.原理推导4.矩阵对数、矩阵指数 1.前言 最近因为项目需求,又学习了一点机器人学的东西,参考书籍为《现代机器人学》,该书采用指数坐标、旋量的方式来对机器人进行描述和运动学、动力学建模,让我对机器人有了更深的理解,也是弥补DH参数建模复杂的缺陷,虽然DH法只用4个参数,而旋量需要更多,但是它骚啊! 本文是我学习了转动的指数坐标表示的一个心得体会,如有问题请多多包涵。 2.指数坐标表示旋转矩阵 指数坐标可以用来表示求解旋转矩阵,其原理非常简单巧妙,需

要恰饭得嘛 2328

vim-virtualenv 核心原理解析:修改 sys.path 与 $PATH 后,:!python 如何识别 virtualenv

vim-virtualenv 是一个让 Vim 与 Python virtualenv 无缝协作的插件。它通过修改 Python 的 `sys.path` 和系统的 `$PATH` 环境变量,使你在 Vim 里执行 `:!python` 或 `:python` 时,就像在终端里 `source activate` 之后一样,自动使用指定虚拟环境中的解释器和第三方包 🎯 ## 先搞清楚问题:为什

gitblog_00695的博客 938

软考高级架构师笔记-10数学计算题

专栏《软考高级架构设计师》更新了,本章列举了10个场景计算题的解法,温故而知新,大家快来卷一卷

java后端开发的博客,不仅仅是后端开发 1598

python中的import、from import以及import as的区别

首先介绍一下import和include的区别或者说import相对include的好处: import导入的内容只会被包含一次,在引入之前会检测是否已经存在该模块,不存在才会被引入,而include是不会做判断的。使用import在递归包含的时候不会出错,不会引起交叉编译的问题。 此外,使用include引入头文件对其引入顺序也有一定的要求。 import import是python提供的...

半暖的博客 3万+

Qt Creator 启动慢、卡顿、无响应 终极解决教程

<think>我们需根据内容生成≤150字的摘要。摘要要涵盖问题、原因、解决方案和效果。注意字数限制。</think>Qt Creator启动慢、卡顿、无响应,主因是配置文件QtCreator.ini膨胀至数十MB(正常<100KB)。删除%APPDATA%\QtProject下的膨胀配置、崩溃备份及qtcreator.db即可,启动从几十秒降至几秒,内存占用恢复正常。辅助优化:关闭有道词典取词、禁用无用插件、调整clangd设置。定期检查配置文件大小,避免多版本共用配置。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 70

Y-Branch and a closed y-branch loop

双臂后面的区域,我们将它的双臂使用一个波导进行了连接,使得它本身形成了一个闭合回路,因此,该结构被称作。它们均是用来对经过它们的光束能量进行分割的一种器件。首先,我们知道一点,在光波导层面,今天给大家介绍一下,什么是。

u011699626的博客 630

python之import机制详解

本文详述了Python的import机制,对于理解Python的运行机制很有帮助!1.标准import:Python中所有加载到内存的模块都放在 sys.modules 。当 import 一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用 import 的模块的 Local 名字空间中。如果没有加载则从 sys.path 目录中按照模块名称查找模块文件

elegance_zf的博客 9133

Doris磁盘空间管理(生命周期管理、清理磁盘空间方法)

在进行数据仓库开发时,比较头疼的是历史数据不删除,磁盘空间不断增长,如果磁盘空间不足时,spark调度任务写入时就会报错。

大模型大数据攻城狮的专栏 1718

Python 的 import 机制

本文转载于https://loggerhead.me/posts/python-de-import-ji-zhi.html#_1一直对 Python 的 import 机制不甚了解,这次在写 Easy-Karabiner 的时候就踩坑了,顺便了解了一下,发现这玩意儿还不是那么「符合直觉」,遂写篇博客讲讲。模块与包两种形式的 importimport 的搜索路径相对 import 与 绝对 impo...

SCUTJcfeng的博客 1028

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一文搞懂 Python 的 import 机制

一、前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python 的 import 机制。import 语句是触发 import 机制最常用的手段,但并不是唯一手段。 importlib.import_module 和 __import__函数也可以用来引入其他模块的代码。 2 .import 是如何执行的? import 语句会执行两步操作: 搜索需要引入的模块 将模块的

Python热爱者的博客 2421

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python 的 import 机制

ImportError: attempted relative import with no known parent package 是如何造成的?

升级打怪记录 444

Python中import语句用法详解

Python中模块导入主要有import ... 和 from ... import ... 两种方式。二者之间的主要区别是:导入模块后,命名空间的变化...

chenshulong的博客 2万+

python中的import机制

python 自带的 module 称为 built-in module从上一节可以看到sys.path所得最前面的就是当前文件所在的目录(有时会显示为""因此如果在当前目录下创建与 built-in module 同名的.py文件并导入的话,python 根据sys.path中顺序寻找指定 module 时,会率先在当前目录下找到匹配的.py并导入,然后就停止搜索后续路径了,因此,此时导入的就是自定义的 module 而非 built-in module。

weixin_45696455的博客 1509

import sys是什么意思_Python 中 import机制

-START-概念模块(module)任何.py文件都可以称为模块包(package)可以将多个模块放入一个包中,就像电脑中的文件夹,但与文件夹的区别是,package包含__init__.py文件 Python import 的搜索路径当我们执行python xx.py时,python是如何帮我们正确定位包所在的目录呢?其实系统是按照以下顺序来寻找的:1.系统内置模块...

weixin_39672396的博客 6459

初窥 Python 的 import 机制

一、前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习资料、代码以及交流解答点击即可加入 本文基于开源项目:https://github.com/pwwang/python-import-system 补充扩展讲解,希望能够让读者一文搞懂 Python 的 import 机制。 1.1 什么是 import 机制? 通常来讲,在一段 Python 代码

【优快云官方推荐】 563
上一篇: Python字符编码详解!
下一篇: Python机器学习:sklearn库的学习!
Python_trys
博客等级 码龄2年 4370粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值