2019-04-04-day026-模块和包的导入
课前
- 估分
- 重新做题
- 思考为什么
- 积累问题
- 提前了解你的情况 40分以下
- 选课系统
- 按照反射那个版本
- 把反射的逻辑看明白
- 接着把逻辑填完整
- 用上pickle
- logging写日志
- 进阶 : 用软件开发规范
- 按照反射那个版本
内容回顾
异常处理
try:
print('可能会出问题的代码块')
except StopIteration:
print('做一些处理')
except Exception as e:
print('做一些处理',e)
else:
print('上面的代码没有发生异常就执行')
finally:
print('一定要执行的代码')
报错查看方法
- 写代码的时候如果报错:从下至上查看你写的第一行代码
- 在控制台报错的地方最后一行a:b
- a 就是错误类型,b就是具体的错误信息
主动抛异常 raise 错误类型
自定义异常
class 异常名(Exception):
def __init__(self,msg=None):
self.__msg = msg
super().__init__()
def __str__(self):
return self.__msg
断言assert bool值
logging模块
import logging
#简单的配置类型
logging.basicConfig(错误级别,格式,文件)
logging.debug() # print
logging.warning() # print
logger对象(编码问题\灵活度高:能选择输出到文件\屏幕)
logger = logging.getLogger()
做了一系列的绑定
logger.debug() # print
#是不是把所有的print都换logging
今日内容
- 什么是自定义模块
- 为什么要有模块
- 模块和包 : py,包含一堆py文件的文件夹(__init__.py)
- 模块
- 模块的导入相当于执行了整个文件
- 一个模块不能被多次导入,一旦导入原文件中的修改也不会生效
- import 模块名
- 命名空间
- as语法
- 一行导入多个模块
- from 模块名 import 变量名
- 命名空间
- as语法
- 一行导入多个名字
- *语法和__all__
- 模块的搜索路径,sys.path,pycahrm对sys.path进行了修改
- 模块能不能被循环导入,循环导入会导致一些问题
包 - 绝对导入
- 软件的开发规范
模块
- 为什么要有模块?
- 内置的函数是程序运行的时候第一时间就加载到内存
- 各个内置的模块给我们提供的方法都有用
- 但并不是时时刻刻可以用上
- 按照这些所有的方法涉及的方面进行分类
- 相同的功能放在一个模块(就是一个py文件)里
- 就可以存储在硬盘
- 如果我们不导入这个模块中的内容就不会出现在我们的内存中
自定义模块
选课 : 主文件 负责和用户交互 登录 选择操作
- 导入一个模块相当于什么?
- 导入一个模块相当于执行了这个被导入的文件
- 模块的语法,一个模块能不能被多次导入
- 一个模块不会被多次执行
import sys
import my_module
print(sys.modules)
import my_module
import my_module
a = 'alex'
b = 'sb'
my_module.a
my_module.b
my_module.read()
- 导入一个模块的时候命名空间的变化
- 第一:创建了一块属于这个模块的命名空间
- 第二:创建了一个变量 指向这个命名空间
- 第三:执行这个文件
import time,os,random,my_module模块虽然一行可以导入多个,但是不推荐这样使用
as语法,time这个名字就失效的,只剩下t了
import time as t
t.time()
import my_module as m
#用来做兼容
mode = 'pickle'
if mode == 'pickle':
import pickle
else:
import json
def dump():
if mode == 'pickle':
pickle.dump(obj,f)
elif mode == 'json':
json.dump(obj, f)
def load():
if mode == 'pickle':
pickle.load(f)
elif mode == 'json':
json.load(f)
mode = 'pickle'
if mode == 'pickle':
import pickle as mode
else:
import json as mode
def dump():
mode.dump(obj,f)
def load():
mode.load(f)
模块的from_import
from my_module import a,read
a = 'alex'
read()
from my_module import a
print(a)
- 所有的导入
- 不管是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(aa)
print(bb)
print(r)
在写代码的时候 不要起和导入的模块中的函数相同的名字
from random import random as r
def random():
pass
random()
import my_module
a = 'alex'
print(a,my_module.a)
from my_module import a
a = 'alex'
print(a)
from my_module import *
print(a,b,c,d,read)
如果我不知道my_module有什么名字
- 我就会不小心在我的代码中重写这个名字
- 就会把之前的覆盖掉
from my_module import * # __all__ = ['字符串数据类型的变量的名']
print(a)
print(b)
from my_module import read,d
read()
print(d)
模块导入的三个问题
模块的搜索路径
import sys
print(sys.path)
sys.path.append(r'D:\PyCharmProject\s20\day26\demo')
print(sys.path)
import module1
#模块能不能被循环导入
#能不能 在a.py import b
#在b.py import a
#模块一旦被导入 再修改这个模块对应的文件也是不会生效的
import time
import my_module
print(my_module.a)
time.sleep(10)
print(my_module.a)
import sys
print(sys.path)
包的绝对导入
- 什么是包
- 内置的 :也有模块和包之分
- import 包会发生什么
- 相当于执行了这个包中的init文件
- import glance
import导入
import glance.api.policy as policy
policy.get()
#根据包的导入要精确到模块名,不能精确到具体的函数或者变量
#然后使用glance.api.policy或者重命名的方式
#来使用这个模块中的所有名字
from import导入
from glance.api import policy
policy.get()
from glance.api.policy import get
get()
#使用from import import后面至少是精确到模块的
#import后面不能有.
#from后面可以有.,但是.的左边永远是包名
#扩展内容: import一个包 这么包中的内容就都可以用了
import glance
print(glance)
print(glance.api)
print(glance.api.policy)
glance.api.policy.get
glance.api.versions.create_resource('aaa')
glance.db.models.register_models('bbb')
软件的开发规范
--项目名称
# -- bin 一个项目的启动文件装在这个文件夹下
# -- strat.py
# -- conf config配置,配置文件
# -- settings.py 可能会发生改变的配置信息
# -- core 核心代码
# -- 相关文件 实际的python代码所在的文件
# -- user.py
# -- auth.py
# -- main.py
# -- lib 库
# -- db database 数据库 一堆数据文件,不一定是py文件
# -- log 日志
2019-04-04-day026-模块和包的导入的更多相关文章
- python模块与包的导入
1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...
- python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
- 【Python3之模块及包的导入】
一.模块导入 1.定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...
- python之模块、包的导入过程和开发规范
摘要:导入模块.导入包.编程规范 以My_module为例,My_module的代码如下: __all__ = ['name','read'] print('in mymodule') name = ...
- DAY16 模块和包的导入
一.包 1.包的定义 包:就是一系列模块的结合体 2.重点 1.包中一定要有一个专门来管理包中所有模块的文件 2.包名:存放一系列模块的文件夹名字 3.包名(包对象)存放的是管理模块的那个文件的地址, ...
- Day 16 模块和包的导入
包的认识 包通过文件夹来管理一些列功能相近的模块 包:一系列模块的集合体 重点:包中一定有一个专门来管理包中所有模块的文件 包名:存放一系列模块的文件夹名字 包名(包对象)存放的是管理模块的那个文件地 ...
- Python中模块与包的导入(朴实易懂版的总结)
这几天,被python包与模块的导入问题,折磨的不行,以前想的很简单,其实不然,经查资料研究,特总结如下: 基本注意点 模块:一般指一个py文件:包:含有许多py文件的文件夹,含有 或不含有(Pyth ...
- python的模块与包的导入
类似于C语言的包含头文件去引用其他文件的函数,python也有类似的机制,常用的引入方法有以下 import 模块名 #模块名就是py文件名 #使用这种方法以后调用函数的时候要使用模块名.函数名()这 ...
- python 深入模块和包
模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...
- 【Python实战】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
随机推荐
- 牛客寒假算法基础集训营6 E 海啸
题目链接点这里 这个题输入类型是第一次见,并没有把n和m的具体范围给你,但是给了n*m的范围,武断的设为1e6*1e6的二维数组铁铁WA,就将二维数组转换为一维数组 题目类型属于二维数组前缀和,有um ...
- 什么是V模型?使用SDLC和STLC学习案例研究
本教程详细介绍了软件/系统开发生命周期(SDLC),如瀑布循环和迭代循环,如RAID和Agile.此外,它继续解释测试的V模型和STLC(软件测试生命周期). 假设为您分配了一项任务,即为客户开发自定 ...
- JComBox的用法
JComboBox的使用: 类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container - ...
- java 类加载机制和反射机制
一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载 将class文件字节码内容加载到内存中, ...
- PAT 1023 Have Fun with Numbers
1023 Have Fun with Numbers (20 分) Notice that the number 123456789 is a 9-digit number consisting ...
- Activiti手动执行的应用(UserTask)
工作流模拟某公司请假流程情景如下: 1.开发人员请假流程,如果开发人员请假,如果请假天数小于3天,组长批准,人事批准即可请假. 2.如果请假大约三天,需要项目经理或者产品经理批准,并且项目总监 ...
- POJ - 题解sol[暂停更新]
初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...
- select2中的ajax请求
下面介绍select2.js的方法,已经整理好文件,可以直接下载使用: 实现效果如下: 引用文件:select2.min.css jquery.js select2.full.min.js <h ...
- Qt_自定义菜单
一.右键菜单 右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现! 重写voidcontextMen ...
- linux ssh root登陆出现错误:Permission denied, please try again
密码已检测过多遍还是登录失败 经检查 vim /etc/ssh/sshd_config PermitRootLogin no 改成 PermitRootLogin yes 修改之后重启就可以了