关于python中的包,模块导入的问题详解(二)
- from import导入
紧接着的是from xx import xx 语法
1 ################
2 from my_moudule import name
3 print(name)
4
5 name=''
6 print(name)
7
8 from my_module import name
9 print(name)
10
11
12
13 from my_module import name,read1,read2 #导入模块中多个变量
14
15
16 from my_mosule import nam as n,read1 as r1,read2 as r2 #重命名
17
18 ####---------星号的用法----------#####
19 from my_module import * #导入模块中所有的名字
20
21
22 #在被导入模块中不希望被全部导入 可以定义一个参数名为__all__的参数列表
23
24 __all__=['name','read1','read2']
25
26
27 #这样,即使当前模块导入了该模块所有的名字,也只能调用__all__列表中的名字 28 ########3---------------------------------------######
29
30
31
32
33
34
35 ################################
36 这种方式导入 的包调用时可以假象成在当前模块定义的变量,调用方便
- 二:pyc文件
pyc:当文件被当作模块调用时会自动产生pyc文件,python文件被编译后就得到pyc(二进制)文件,再次被调用时,就不用再次编译,直接引用,
pyc文件的优点:
1,python为了提高运行效率也会进行编译,python是解释型语言,运行的时候需要通过python解释器编译,所以先编译出pyc文件后,可以节省编译这一步的耗时时间。 2,不想让源码泄露,因为py文件是可以直接看到源码的,对于一般的商业公司来说,这有点不妙,因为pyc文件可以独立于py文件,删除py文件也不会出错。这就是太好了,只需要编译成pyc文件再发布出去就好了。
- 三:模块的导入和修改
############
import file_1
print(file_1.name)
##修改源文件name
import file_1
print(file_1.name) #####结果不会受影响,依旧是最开始的值,, 原因:import不会多次导入一个模块,即便有改动,也检测不到
非要强制修改可使用importlib模块中的reload方法 from importlib import reload ******
*****
**
reload(file_1) *****
****
**
#结果就会更改了 不 要 经 常 用!!!!
- 四:模块的循环使用
现有 A B 两个文件,A引用了B ,B同时也引用了A,这就是循环引用,要避免这种设计

五:dir(模块)
dir(模块) :可以获取到这个模块中所有的名字,可以使用反射的方法对元素进行操作,因为是以字符串形式返回的
二:包的导入:
2.1、什么是包:
含有一个__init__.py的文件夹就是一个包,包中通常含有一些py文件,一般包是给我们提供复杂功能的功能
在python2中需要注意的是,如果建的文件选择的不是文件包,不会产生__init__.py文件,会出现导入不成功的错误!!!
手动建立这个文件就可以。导入包的过程中自动执行了__init__.py文件
2.2、从包当中导入模块
#############从包中导入模块的两种方法 同包当中导入模块 ##########111111
import #import 包.包.包.包.包.包.包.模块
#最终是要精确到模块才行 from import#####个人推荐 from 包.包.包.包 import 模块 #把包和模块分离 且调用更方便
app.get() #模块名.方法
from 包.包.包.包.包.模块 import 方法 #具体到模块以下,,直接调用方法
get()#直接方法名即可
2.3、导入包:

如图所示的导入,虽然能成功导入,却无法使用这个包中的模块或者工具集
原因是路径问题,
包导入的绝对(路径)导入:是我们在导入包需注意的一点,要以根节点为起点导入
缺点:每次移动模块都需要重新修改路径
优点:模块可以单独执行
######目录结构###
2
3 ---/
4 |
5 |
6 glance2——
7 | |
8 | |——__init__.py ----->(from glance2 import api )
9 | |
10 | api——
11 | |
12 | |——__init__.py--------->(from glance2.api import policy)
13 | |
14 | |——policy.py ------->(def get(): print(""))
15
16 ######################glance3同级目录可调用 import glance2 #执行了glance2下的__init__.py文件
glance2.api #找不到方法 #报错 ,如上图所示
sys.path中的内容,永远是当前执行文件的路径 按上图路径配置即可 每个路径都明明白白写清楚,清晰看到目录结构,方便后续开发
包导入的相对(路径)导入:(.)表示当前目录,,(..)上级目录
优点:文件夹有移动也不会影响整个程序,只要能找到最相对根目录就可以导入
缺点:只要带相对路径导入的模块,就无法单独执行,只能当作模块给别人提供服务
######目录结构###即使后面的开发工作中文件夹,,,文件夹有移动也不会影响整个程序 ---/
|
|
glance3——
|
|——__init__.py ----->(from . import api) #相对导入
|
api——
|
|——__init__.py--------->(from . iport policy) #相对导入
|
|——policy.py ------->(def get(): print("")) ######################glance3同级目录可调用
import glance3
glance3.api.policy.get() 123
关于python中的包,模块导入的问题详解(二)的更多相关文章
- Python中生成器和yield语句的用法详解
Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...
- python中利用队列asyncio.Queue进行通讯详解
python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...
- 关于python中的包,模块导入的问题详解(一)
最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...
- python中如何添加模块导入路径?
python中自定义模块导入路径的方式主要有以下3种: (1)使用sys.path.append() 随着程序执行,会动态地添加模块导入的路径,但是程序执行结束后就会立即失效(临时性的) import ...
- python的内置模块xml模块方法 xml解析 详解以及使用
一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...
- python接口自动化(九)--python中字典和json的区别(详解)
简介 这篇文章的由来是由于上一篇发送post请求的接口时候,参数传字典(dict)和json的缘故,因为python中,json和dict非常类似,都是key-value的形式,为啥还要这么传参,在群 ...
- python关于Django搭建简单博客项目 详解二-setting.py
这一篇我们来讲解setting.py,具体内容以注释形式写入到下面的setting.py代码中,篇幅所限已把官方所给英文注释删除. 全部源代码和详解请参看http://github.com/Cheng ...
- Python使用socketServer包搭建简易服务器过程详解
官方提供了socketserver包去方便我们快速的搭建一个服务器框架. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的 ...
- python中的列表(list) 切片详解
1.切片: 通过指定下标的方式来获得某一个数据元素,或者通过指定下标范围来获得一组序列的元素,这种访问序列的方式叫做切片. 访问某一个数据元素的的语法如下: sequence[index] ...
随机推荐
- H5页游戏内存溢出问题
记录自己解决的第一个H5页的性能问题, 关于内存溢出 拼字游戏 问题表现 初始化后, 第一次拼字并不卡. 随着拼的次数越来越多, 越来越卡 浏览器任务管理器中可以看出, 内存持续升高 确定内存问题, ...
- 【洛谷1345】 [USACO5.4]奶牛的电信(最小割)
传送门 洛谷 Solution emmm,直接对于每一个点拆点就好了. 然后边连Inf,点连1,跑最小割就是答案. 代码实现 #include<bits/stdc++.h> using n ...
- vsftp 上传550 Permission denied解决办法
在linux服务器上安装和配置了vsftp,添加用户然后现在用这个用户登录ftp成功,能下载,但是不能上传和删除,明明这个用户的主目录给了777权限了,但是始终无法上传 解决办法:是在/var/ftp ...
- oracle存储过程中进行分页
create or replace procedure APP_BUSSINESS_CARD_LIST(p_in_str in varchar2,p_out_str out varchar2) is ...
- redis-Sentinel持续高可用
自动故障转移机制 redis目前只支持主从复制备份(不支持主主复制),当主redis挂了,从redis只能提供读服务,无法提供写服务.所以,还得想办法,当主redis挂了,让从redis升级成为主re ...
- LinearLayout线性布局
作用 : 线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件横向或者纵向排列, 通过android:orientation属性控制; 不换行属性 : 线性布局中的组件不会 ...
- C# 创建、部署和调用WebService的示例
http://www.cnblogs.com/Brambling/p/6815565.html
- iscsi序列二、iscsi多路径配置方式
一.ISCSI多路径应用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 如上图,如果SAN服务器与客户端交换机只有一条线路 ...
- 等待数据库引擎恢复句柄失败 SqlServer2012安装时报错 Win10
上周,在一批Win10系统电脑上安装SqlServer 2012时,屡次发生报错,安装失败,显示的失败信息是:等待数据库引擎恢复句柄失败 如下图所示: 面对这样的错误,我的第一反应是百度,在百度上找了 ...
- rocksdb wiki文档阅读笔记
由于是英文文档,不做笔记过一阵就忘了,现在把关键点记录到这,开发的时候使用. 具体wiki地址:https://github.com/facebook/rocksdb/wiki 1)Column Fa ...