python模块导入

一、模块的本质

我们写python程序经常会导入很多模块,那到底模块是什么呢?其实模块就是一个python文件,我们导入模块时的模块名就是python文件的名字,比如我们写了一个叫my_module.py的文件就可以当作模块导入其他python文件中,模块名就是my_module。

二、模块导入的两种方式

2.1、import

2.1.1、import导入模块时会做三件事:

1、为该模块生成一个独立的命名空间

2、在该命名空间中将模块的代码执行一遍

3、建立模块名到该命名空间的引用

2.1.2、别名

当我们导入的模块名太长不方便调用,或者跟我们自己定义的函数名或变量名有重名的时候怎么办呢?这个时候就可以使用as关键字给模块起个别名,之后在带哦用模块中的函数或变量时就用这个别名就可以了,比如

import random as rprint(r.randint(1,5))
-------------------------------------------------------------------------------------- 4

2.1.3、一行导入多个模块

python支持import后跟多个模块名,用逗号分割即可

import random ,os,sys

2.2、from  import

2.2.1、与import的区别

from  import也会为模块创建独立的命名空间,但是它直接将import后的名字导入到了当前命名空间,我们可以直接使用这个名字不需要用模块名.名字的方式了,比如

from collections import namedtuple
Point=nametuple(‘Point‘,[‘x‘,‘y‘])
p=Point(1,2)
print(p.x,p.y)
--------------------------------------------------------------------------------------
1 2

但是需要注意的是,如果后面有跟这个导入的名字重名的情况的话,这个被导入的名字就会被后面的覆盖了

2.2.2、别名

from import也支持使用as关键字给导入的名字起别名,同样在后续使用时也是使用这个别名了

2.2.3、同时导入一个模块的多个名字

from import支持一行导入多个名字,比如

from collections import namedtuple,OrderedDict,defaultdict,deque,Counter
Point=namedtuple(‘Point‘,[‘x‘,‘y‘])
p=Point(1,2)
print(p.x,p.y)
--------------------------------------------------------------------------------------
1 2

2.2.4、from  import *

from import *可以将模块中除了下划线_开头的变量外的所有名字都导入当前命名空间,同时我们可以配合使用__all__=[‘名字1‘,‘名字2‘]的方式控制哪些名字可以被导入,但是大部分情况下不建议这样导入,因为我们不知道模块中有哪些名字,会不会跟现有代码中的名字重名

三、模块重新加载

python是不支持重新加载模块或者卸载已加载的模块的,因此一旦程序运行后,对模块的修改都不会生效,一般情况下只能重新启动程序,但是有一种方法可以在程序运行的时候重新加载模块,就是importlib模块的reload方法,在导入了importlib模块后,我们可以使用importlib.reload(模块名)的方式重新加载模块,但是只建议在测试的时候使用。

四、控制模块的执行逻辑

在python内置的全局变量中有一个__name__的变量,它的值会根据python文件被执行的方式不同而不同,如果python文件是直接执行的那么它的变量值就是__main__,如果是被当作模块间接执行的那么它的变量值就是模块名,利用这个我们就可以控制一个python文件中的代码在直接执行时才执行否则就不执行

五、模块搜索顺序

python在搜索模块时会先找内存中已加载的模块,然后到内置模块中查找,最后从sys.path中包含的路径中按顺序查找,这里我们需要注意一点,我们自己定义的模块名不要跟内置模块重名,否则重名的那个内置模块就无法使用

六、python编译文件

python解释器在执行python时会把第一次加载的模块进行一次编译生成.pyc的文件,下次就会直接加载这个.pyc文件而不是模块文件,这样的好处就是在模块加载的时候会加快速度,但是默认不会给其他python文件生成.pyc文件,我们可以在运行python文件时用python -m  XXX.py的方式让python给这个python文件也生成一个.pyc的文件

七、包

python中的包其实就是一个包含__init__.py文件的文件夹,我们在导入一个python包的时候实际上就是导入了这个文件而已。

绝对导入:就是在from中指定具体的子模块路径,比如from glance.cmd import manage

相对导入:就是用点代表子模块前的路径,子模块外有几层包就需要几个点,比如from .cmd import manage。相对导入只能在同一个包内使用并且只有子模块被其他文件导入执行时才能正常执行。

时间: 2024-08-29 12:47:17

python模块导入的相关文章

python 模块导入import和import from区别

模块就是一个.py文件,在名字空间下导入模块导入import和import from,那么python 模块导入import和import from区别是什么呢 1,import 导入模块 import 模块名 print(模块名.方法) 2,import 模块名 from 方法1,方法2 调用方法  print(方法1) 注意 import 模块名 as 别名 文章来自 www.96net.com.cn 原文地址:https://www.cnblogs.com/96net/p/9743742.

python模块导入细节

python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 用于执行的可执行程序文件 不用与执行,仅用于被其它python源码文件导入的模块文件 例如文件a.py和b.py在同一目录下,它们的内容分别是: # b.py x="var x in module b" y=5 # a.py: import b import sys print(b.x)

python模块导入原理

转自:http://blog.csdn.net/u012422440/article/details/41791433 今日在自学Python,借此机会,正好重新开始写博文,既可以巩固python的知识,也可顺便提高一下文笔. 一.python模块基础 言归正传,Python的模块是python语言中代码复用的最高级别,也是系统命名空间的的划分标准,也是供顶层文件(就是包含程序主要控制流程的部分)调用的工具库文件.实现模型其实很简单,任何一个python文件都可以当做模型通过import进行导入

Python模块导入和常用内置方法

模块导入和常见内置方法 __file__: os.path.dirname(__file__)和os.path.join(dirname, filename),通过sys.path.append()可以把模块添加到Python的环境变量目录中 __name__: 直接执行py文件时__name__返回"__main__", 通过import调用时__name__返回的是(包名.模块名) __doc__: 返回.py文件中"""xxx""

python 模块导入

1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导入模块的变量,通过该变量,我们可以访问math模块中所定义的所有公开的函数.变量和类: >>> math.pow(2, 0.5) # pow是函数 1.4142135623730951 >>> math.pi # pi是变量 3.141592653589793 如果我们只希

Python模块导入的多种方式

在python中, 模块即一个后缀名为".py"文件,python用文件组织一个模块. 模块导入遵循作用域原则, 在什么作用域导入就只能在当前作用域生效. 一个模块只被加载一次,无论导入它多少次. from module import name 是把名字导入到当前的名称空间 单行导入单个模块 import json 单行导入多个模块 import os, sys, time 导入指定的模块属性 from os import path, fork, mkdir 多行导入 from Tki

python 模块导入详解

本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句相关的概念.通常,导入模块都是使用如下语句: import ... import ... as ... from ... import ... from ... import ... as ... 一般情况下,使用以上语句导入模块已经够用的.但是在一些特殊场景中,可能还需要其他的导入方式.例如 Python 还提供了 __import__ 内建函数和 importlib 模块来实现动态导入.动态导入的好处是可以延迟

Python模块导入详解

定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须带有一个__init__.py文件). 导入模块 导入单个: import 模块名 导入多个: import 模块名1,模块名2 导入模块中所有代码: from 模块名 import * import导入于from 模块名 import *导入在调用上的区别: module.function() f

python模块导入的问题

从模块导入函数时,通常可以使用 import somemodule 或者 from somemodule import somefunction 或者 from somemodule import somefunction , anotherfunction ,yetanotherfunction 或者 from somemodule import * 只有确定自己想要从给定模块导入所有功能时,才应该使用最后一个版本,但是两个模块都有同一个函数的话怎么办呢? 只需要使用第一种方式导入,然后向下面