【python3】 解:import导包机制
模块和包
模块:我们定义的.py结尾的文件就是一个模块,模块中通常定义了类、方法、变量等一系列功能;
包:存放模块的文件夹,含有init.py文件,定义path属性。
import语句的作用
import语句用于导入其他 python 文件(模块或包),使用该模块定义的类、方法或变量,从而达到代码复用的目的。
导包的两种方式
import 包名/模块名
from 包名/模块名 import 任意变量
import 导入模块时,默认执行了这个模块的代码,若重复多次导入,则只会执行一次。因为第一次导入后,就将模块名加载到内存,存储在sys.modules字典中,后面重复导入只是在加载内存中模块对象的引用,而不会重新执行模块内的语句。
import导包的机制
1:执行import时,会先从sys.modules中查询是否被导入;
2:若已经导入,则直接引用,若没有导入,则依据sys.path按照列表顺序依次到每个目录下去匹配导入的模块;
3:若找到这个模块,则会创建这个模块的命名空间,并将模块中的名字存储到命名空间中。
模块导包顺序
内置标准模块,help('modules')查看;
第三方开源模块,扩展的,通过pip install联网安装的;
自定义模块。
导包示例

1 -- my_proj
2 -- common
3 -- handle_excel.py
4 -- handle_conf.py
5 -- handle_db.py
6 -- test
7 -- test_login.py
8 -- test_register.py
9 -- run.py
项目结构
同级目录调用:

1 在test_login 中调用 test_register:
2 import test_register
3 from test_register import *
4 from test.test_register import *
5 import sys
6 print(sys.path)
7 ['C:\\Users\\jo\\Desktop\\api\\test', 'C:\\Users\\jo\\Desktop\\api',, ……]
同级目录的调用
调用兄弟目录的子目录:

1 在test_login 中调用 handle_excel:
2 from common import handle_excel
3 from common.handle_excel import *
兄弟目录的子目录
as别名的妙用
了解过的同学都知道,as是给模块重命名,即起一个别名,那么什么情况用as,什么情况不需要,应用场景有哪些呢?
场景一:当模块名过长,引用时影响观感,为了提升代码的可读性,我们可以用as进行重命名,例如我们在做UI自动化,需要等待某个条件被触发,需要导入expected_conditions模块使用触发条件的方法,每次用expected_conditions调用方法太长,但起个别名,如EC调用就简洁许多,这时我们可以这样写:

1 from selenium.webdriver.support import expected_conditions as EC
场景一实例
场景二:当导入不同的模块,但完成的是相同的功能,我们也可以用as别名来进行统一操作,不用写两套一样的代码,如在接口自动化我们在进行数据库验证时,不同公司使用数据库不相同,有些mysql,有些orcle,但是操作步骤均一致,若不设置别名,我们需要写两套代码,设置别名后,我们可以兼容不同的数据库,实现方式如下:
tip:重命名后,只支持用重命名变量名去调用,不支持用原模块去调用。

1 class Handle_Mysql:
2
3 def __init__(self, connect_type='mysql'):
4 if connect_type == 'mysql':
5 import pymysql as db
6 from pymysql.cursors import Cursor as Cur
7 self.conn = db.Connection(
8 host='',
9 uesr='',
10 password='',
11 database='',
12 port='',
13 charset='utf-8'
14 )
15 elif connect_type == 'orcle':
16 import cx_Oracle as db
17 from cx_Oracle.Cursor import Cursor as Cur
18 self.conn = db.connect('username','password','host/orcl')
19 self.cur = Cur(self.conn)
20
21 def get_all(self, sql):
22 """用于返回所有数据,执行sql前后需提交事务,以防数据冲突"""
23 self.conn.commit()
24 # 执行sql加入异常判断,sql执行失败就回滚
25 try:
26 self.cur.execute(sql)
27 except Exception as e:
28 self.conn.rollback()
29 return 'sql执行错误:{}'.format(e)
30 self.conn.commit()
31 return self.cur.fetchall()
32
33 def close(self):
34 self.cur.close()
35 self.conn.close()
场景二实例
【python3】 解:import导包机制的更多相关文章
- import 导包三种方法
		
# -*- coding: utf-8 -*- #python 27 #xiaodeng #导包三种方法 #(常用)完整的导入,也是最基本的方法 import re #自己定义别名,一般情况下尽量少用 ...
 - node - 导包机制
		
在学node js的时候,经常各种导包 let http = require('http'); 然后它的运行机制: 1. 查找当前目录下面的node_modules 2. 全局查找(首先添加到path ...
 - Python  基础之import导包
		
首先需要将import内容建立一个大概如下层级的包: 以黑色框为第一级,蓝色框为第二级,棕色框为第三级,红色框为第四级 一.import 引入初识 首先在module.py写入代码如下: xboy = ...
 - Go基础系列:import导包和初始化阶段
		
import导入包 搜索路径 import用于导入包: import ( "fmt" "net/http" "mypkg" ) 编译器会根据 ...
 - opencv——import导包出现错误
		
原因:编辑器找不到,CV2的模块,也就是导入这个模块失败: 原因可能是sublime找不到这个这个模块的位置,不知道这个包在哪里,这时候需要我们安装OpenCV的一个扩展包. 解决步骤: ①:找到py ...
 - python导包语句执行
		
今天在做项目中遇到一个问题,在first_page中引用login的登录方法,第一次执行登录可以正常登录,登录成功后,再选择返回主菜单,回到上个页面,再选择登录时报错“login_class isno ...
 - python导包学习总结
		
python初学者,对于导包纠结了不少时间,总结分享,持续前进~ Python导包的两种方法: 1.1 from 包.模块 import 方法名,调用时直接使用方法名() 1.2 from 包. ...
 - IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
		
JetBrains公司的intellij Idea堪称JAVA编程界的苹果,用户体验非常好 下面介绍一下IDEA的一个能显著提升写代码效率的非常好用的功能设置—— Auto Import Auto I ...
 - Python3基础 sys.path 查看与修改导包的路径
		
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
 
随机推荐
- CF 1405E Fixed Point Removal【线段树上二分】
			
CF 1405E Fixed Point Removal[线段树上二分] 题意: 给定长度为\(n\)的序列\(A\),每次操作可以把\(A_i = i\)(即值等于其下标)的数删掉,然后剩下的数组 ...
 - HOJ1867 经理的烦恼
			
My Tags (Edit) Source : HCPC 2005 Spring Time limit : 2 sec Memory limit : 32 M Submitted : ...
 - JavaScript——DOMM
			
文本节点 != 文本内容
 - JavaScript——面向对象与原型
			
在最外面使用this,此时this是window作用域下的,因此他指向全局变量 对象冒充: 实例属性不会共享!
 - python访问Oracle数据库相关操作
			
环境: Python版本:3.6.6 win系统:64位 Linux系统:64位 首先安装配置时,版本必须一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本! ...
 - Nacos学习与实战
			
1. 什么是Nacos 官网:https://nacos.io/zh-cn/index.html Nacos是阿里巴巴集团开源的项目,Nacos 致力于帮助您发现.配置和管理微服务. Nacos提供了 ...
 - windows创建p12格式的ios开发证书的流程
			
现在做ios开发,原生的开发已经不是第一选择,现在有很多不同的H5开发框架,在性能上都不输原生开发,而UI方便却能做得比原生更炫,比如CSS得灵活度肯定是比原生开发出来得应用更灵活的. 我们在开发IO ...
 - spark mllib als 参数
			
在一定范围内按照排列组合方式对rank,iterations,lambda进行交叉评估(根据均方根误差),找到最小误差的组合,用于建立矩阵分解模型.Signature: ALS.train( rati ...
 - hdu2333-贪心,如何去后效性,背包太大怎么办,如何最大化最小值,从无序序列中发掘有序性质
			
补充一下我理解的中文题意.. 你要重新组装电脑..电脑有一些部件..你的预算有b,b(1~1e9),有n个部件..每个部件有类型和名称以及价钱和质量现在你要在不超过预算b的情况下..每个类型都买一个部 ...
 - μC/OS-III---I笔记10---内存管理
			
内存管理: 平时经常用到一些windows内存管理的软件,有一些内存管理的软件进行内存碎片的整理,在频繁分配和释放内存的地方会造成大量的内存碎片.内存碎片是如何形成的呢?书中是这样写的:在不断的分配和 ...