python模块导入import详解.md

目录

一.什么是模块

模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个
模块。

模块的本质就是一个.py文件,里面包含已经封装好的类、方法等。模块导入也即是使用这个py文件中的变量、方法。

代码执行到模块导入位置时,会预先加载(执行)导入的模块。

二.分类

1.按位置分

  • 常见的内置模块
    python源码之中内置的模块,常见的有 time、random、os、mutilprocessing等
    http://python.jobbole.com/86332/
  • 外部安装的模块
    比如python写游戏的pygame模块、连接mysql数据库的pymysql模块等。
    一般导入方式:
    1. pip install 模块名(虚拟环境使用较多)
    2. pycharm的setting --> plugins

注意:使用from导入变量,而那些变量碰巧和作用域中现有的变量同名,本地变量就会被悄悄地覆盖掉

2.按功能分

例如:时间模块time带有多个时间方面的函数,而random模块主要是实现随机功能。

三.模块的导入方式

python语言中主要有三种方式

1.import

有5种形式:
import 模块(import 模块.方法 错误)
import 模块 as 别名
from 模块 import 方法(变量)
from 模块 import 方法(变量) as 别名
from 模块 import *

注意:模块名一般为文件名,且符合python标识符规则(由数字字母下划线组成,数字不能开头)

import time
a = time.time()
print(a)

2. _import_

# 参数为模块名
module = __import__("time")
print(module.time())

3.getattr


# 参数一为模块对象,参数二为模块方法
module_fun = getattr(time, 'time')
print(module_fun())

使用案例

# 框架思想

import sys

action_list = sys.argv  # 得到一个列表

moudle = __import__(action_list[1])

fun = getattr(moudle, action_list[2])

print(fun())

四.模块的存储位置

1.常见系统路径

当你导入一个模块,Python解析器对模块位置的搜索顺序如下

import sys

print(sys.path)

#结果
[
'',  #当前路径
'/home/yz/desktop/test', #项目路径
'/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages'
]

2.查询某个模块的路径

 import random
 random.__file__
 #结果
'/usr/lib/python3.5/random.py'

3.更改模块路径

在这里插入图片描述

注意:路径的修改只对当前文件有效

五.实际应用

1. 重新载入

在终端命令行之中,A导入模块B,当B修改之后,A仍然使用B被修改之前的代码。
这个时候就需要重新导入。使用reload

form importlib import reload
reload(模块名)

2. 浅拷贝导入

“import 模块”属于浅拷贝,如果A修改了导入的B变量,此时c导入该B变量还是未修改的B.
在这里插入图片描述

3. 循环导入

circular import异常:A导入B,B导入C,而C又导入A,这样构成了一个死循环。
解决:
1. 在函数方法内部导入B,错开导入代码的执行顺序
2. A、B©文件合并或者找一个D文档来分离A/B/C。

六. 模块与包

清楚模块与包的区别!
1.模块:单个的py文件
2.包:含有__init__.py文件的文件夹。里面一般有多个.py文件。

注意:如果包的__init__.py文件是空的,则 “from 包 import * ” 是无效的。

七. __all__和__name__

  1. 对于 ‘from 模块 import *’:A文件里有一个列表__all__=[ ],那么其它文件只能导入A文件中列表__all__的元素限定的变量。
  2. _name_
if __name__ == '__main__'

在A文件中,其属性__name__的值是_main_;而在其它文件中,导入的A.__name__的值是A的文件(模块)名。

猜你喜欢

转载自blog.csdn.net/Anker_yz/article/details/82858374
今日推荐