import模块/包--软件开发规范
一. 模块
模块:就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
import加载的模块分为四个通用类别:
1 使用python编写的代码(.py文件)
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包
4 使用C编写并链接到python解释器的内置模块
import 语法:
导入一个模块相当于执行了这个被导入的文件
一个模块可以多次导入但不会被多次执行
导入一个模块的时候命名空间的变化
第一:创建了一块属于这个模块的命名空间
第二:创建了一个变量 指向这个命名空间
第三:执行这个文件
import time,os,random,my_module
模块虽然一行可以导入多个,但是不推荐这样使用
as语法:
import time as t
t.time() time这个名字就失效的,只剩下t了
from import 语法:
from time import time
time()
不管是import 还是from import
都是执行完整的那个被导入的文件
并且所有的文件的导入 都不会破坏模块中本身的命名空间
如果是import 模块名
那么是模块名 指向 整个文件的命名空间
如果是from 模块名 import 变量名
那么 是在本文件中创建了同名的变量名 指向模块中的变量值
导入多个变量,并且重命名
from my_module import a,b,read
from my_module import a as aa,b as bb,read as r
print(a)
print(aa)
aa 和a都存在
from my_module import * # *表示导入模块中所有的变量和函数
# 可以在模块中使用__all__=['变量或方法'] 限制*导入的内容均为列里的变量或方法 但是指定导入变量或方法名不受影响 模块导入时的三个问题:
# 1 模块的搜索路径 import sys print(sys.path) #查看当前文件的系统路径 如果没有所要导的模块或包的路径 就无法正常导入 会提示:ModuleNotFoundError: No module named 'test3' sys.path.append(r'D:\PyCharmProject\s20\day26\demo') #将所要导的包或模块添加到系统路径 print(sys.path) import module1
# 模块之间的循环导入
# 在a.py import b
# 在b.py import a #a.py
import b aaa= ''
print(aaa) #b.py
import a bbb =222
print(bbb) '''
执行a.py的结果 #先导入b(这时执行b,b先执行导入a,执行a,但此时a已经执行过导入b.所以就不再执行这一步了,接着执行aaa,print(aaa)就到得了第一个答应结果
111 #然后返回b,接着执行bbb,print(bbb),得到第二个打印结果
222 #最后又返回a 接着执行aaa,print(aaa) 得到第三个打印结果
111
'''
#循环导入的时候如果提前调用导入模块中的变量或方法会报错 #a.py
import b aaa= ''
print(b.bbb) #b.py
import a bbb =222
print(a.aaa) #执行a.py 会报错 AttributeError: module 'b' has no attribute 'bbb'
#这是因为循环导入时还没完成导入就开始调用b中内容当然就报错
#可以使用__name__ == '__main__'来避免这个错误
import b aaa= '111'
if __name__ =='__main__':
print(b.bbb)
# 3 模块一旦被导入 再修改这个模块对应的文件也是不会生效的
import time
import my_module print(my_module.a)
time.sleep(10) #在这期间去修改my_module中的变量并不会对目前这个导入生效
print(my_module.a) import sys
print(sys.path)
二. 包的导入
包是一种通过使用‘.模块名’来组织python模块名称空间的方式。
1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法
2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)
3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
强调:
1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错
2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模块
注意事项
1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。
可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。
(需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法)
2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
3.对比import item 和from item import name的应用场景:
如果我们想直接使用name那必须使用后者。
#import 导入
import glance.api.policy
glance.api.policy.get()
#from import导入 from glance.api import policy
policy.get()
from glance.api.policy import get
get()
使用from import import后面至少是精确到模块的
import后面不能有.
from后面可以有.,但是.的左边永远是包名
# 扩展内容: import一个包 这么包中的内容就都可以用了
import glance
#但是glanc目录下的__init__文件必须写:
'''
from glance import api
from glance import cmd
from glance import db
'''
print(glance)
print(glance.api)
print(glance.api.policy) glance.api.policy.get() #同理 api下的__init__写 from glance.api import policy
'''
<module 'glance' from 'D:\\飞秋下载\\feiq\\Recv Files\\day26\\glance\\__init__.py'>
<module 'glance.api' from 'D:\\飞秋下载\\feiq\\Recv Files\\day26\\glance\\api\\__init__.py'>
<module 'glance.api.policy' from 'D:\\飞秋下载\\feiq\\Recv Files\\day26\\glance\\api\\policy.py'>
from policy.py '''
软件的开发规范:
# --项目名称
# -- bin 一个项目的启动文件装在这个文件夹下
# -- strat.py
# -- conf config配置,配置文件
# -- settings.py 可能会发生改变的配置信息
# -- core 核心代码
# -- 相关文件 实际的python代码所在的文件
# -- user.py
# -- auth.py
# -- main.py
# -- lib 库
# -- db database 数据库 一堆数据文件,不一定是py文件
# -- log 日志
# userinfo
import模块/包--软件开发规范的更多相关文章
- python 全栈开发,Day29(昨日作业讲解,模块搜索路径,编译python文件,包以及包的import和from,软件开发规范)
一.昨日作业讲解 先来回顾一下昨日的内容 1.os模块 和操作系统交互 工作目录 文件夹 文件 操作系统命令 路径相关的 2.模块 最本质的区别 import会创建一个专属于模块的名字, 所有导入模块 ...
- python开发调用基础:模块的调用&制作包&软件开发规范
一,包的调用 #!/usr/bin/env python #_*_coding:utf-8_*_ #调用 glance[1..4]\api\policy.py 路径 # policy.py 内容 # ...
- CSIC_716_20191115【内置函数、递归、模块、软件开发规范】
内置函数 map map映射:语法结构(函数对象,可迭代对象) 依次从可迭代对象中取值,然后给函数做运算,再依次返回运算的结果. ss = map(lambda x: x + x, [1, 2, 3] ...
- py 包和模块,软件开发目录规范
目录 py 包和模块,软件开发目录规范 什么是包? 什么是模块? 软件开发目录规范 py 包和模块,软件开发目录规范 什么是包? 包指的是内部包__init__.py的文件夹 包的作用: 存放模块,包 ...
- Python模块的导入以及软件开发规范
Python文件的两种用途 1 . 当脚本直接使用,直接当脚本运行调用即可 def func(): print("from func1") func() 2 . 当做模块被导入使用 ...
- Day5 函数递归,匿名、内置行数,模块和包,开发规范
一.递归与二分法 一.递归 1.递归调用的定义 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身 2.递归分为两类:直接与间接 #直接 def func(): print('from fu ...
- python中软件开发规范,模块,序列化随笔
1.软件开发规范 首先: 当代码都存放在一个py文件中时会导致 1.不便于管理,修改,增加 2.可读性差 3.加载速度慢 划分文件1.启动文件(启动接口)--starts文件放bin文件里2.公共文件 ...
- Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)
Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...
- Python 3 软件开发规范
Python 3 软件开发规范 参考链接 http://www.cnblogs.com/linhaifeng/articles/6379069.html#_label14 对每个目录,文件介绍. #= ...
随机推荐
- js中innerHTML、outerHTML与innerText的用法与区别
____________________________________________________________________________________________________ ...
- 【java学习】实践中总结--持续更新中
目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...
- Rsync + sersync 实时同步备份
一 Rsync + Sersync 实时同步介绍 1.Rsync 服务搭建介绍 云机上搭建Rsync server,在本地搭建Rsync Clinet. 2. Sersync 服务搭建介绍 ...
- node编写定时任务,for循环只执行一遍的解决办法
在用node编写定时任务时候,发现for循环只执行i=0这一次,就不接着循环执行了,下面贴上代码: exports.task = async function(ctx){ let { app } = ...
- jmeter在linux服务器的安装和运行
一.工具准备 1.下载安装xshell连接服务器工具 2.下载安装Xftp工具,向服务器传输文件工具 3.下载jdk 1.8版本:jdk-8u11-linux-x64.tar.gz 下载地址: htt ...
- 对多条件进行组合,生成笛卡尔积的用例集合的python代码实现
做专项测试需要对一些因素进行组合的测试,这里组合起来后数据量可能很大,我们可以用python来代劳 代码有优化空间,目前先用着. ************************代码开始******* ...
- leetcode 54. Spiral Matrix 、59. Spiral Matrix II
54题是把二维数组安卓螺旋的顺序进行打印,59题是把1到n平方的数字按照螺旋的顺序进行放置 54. Spiral Matrix start表示的是每次一圈的开始,每次开始其实就是从(0,0).(1,1 ...
- ABP之Caching
简介 ABP提供缓存抽象,默认使用MemoryCache.但是可以替换成其他缓存程序,比如 Abp.RedisCache 是使用Redis实现缓存. ICacheManager 缓存的主要接口是ICa ...
- 用Case类生成模板代码
将类定义为case类会生成许多模板代码,好处在于: ①会生成一个apply方法,这样就可以不用new关键字创建新的实例. ②由于case类的构造函数参数默认是val,那么构造函数参数会自动生成访问方法 ...
- 一入OI深似海 4 —— 纪念我最后一次PJ(中)
不知道怎么回事,直到比赛前10分钟才放我们进考场. 考场在体育馆里面,很大很壮观. 我匆匆忙忙地找到位子,屁股还没坐热,被老师告知不能带水. what?! 于是我只好把水放在统一放私人物品的地方. 电 ...