课前

  1. 估分

    • 重新做题
    • 思考为什么
    • 积累问题
    • 提前了解你的情况 40分以下
  2. 选课系统
    • 按照反射那个版本

      • 把反射的逻辑看明白
    • 接着把逻辑填完整
    • 用上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

今日内容

  1. 什么是自定义模块
  2. 为什么要有模块
  3. 模块和包 : py,包含一堆py文件的文件夹(__init__.py)
  4. 模块
    • 模块的导入相当于执行了整个文件
    • 一个模块不能被多次导入,一旦导入原文件中的修改也不会生效
    • import 模块名
      • 命名空间
      • as语法
      • 一行导入多个模块
    • from 模块名 import 变量名
      • 命名空间
      • as语法
      • 一行导入多个名字
      • *语法和__all__
    • 模块的搜索路径,sys.path,pycahrm对sys.path进行了修改
    • 模块能不能被循环导入,循环导入会导致一些问题
    • 绝对导入
  5. 软件的开发规范

模块

  • 为什么要有模块?
  • 内置的函数是程序运行的时候第一时间就加载到内存
  • 各个内置的模块给我们提供的方法都有用
  • 但并不是时时刻刻可以用上
  • 按照这些所有的方法涉及的方面进行分类
  • 相同的功能放在一个模块(就是一个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()
  • 导入一个模块的时候命名空间的变化

    1. 第一:创建了一块属于这个模块的命名空间
    2. 第二:创建了一个变量 指向这个命名空间
    3. 第三:执行这个文件

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-模块和包的导入的更多相关文章

  1. python模块与包的导入

    1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...

  2. python模块及包的导入

    一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...

  3. 【Python3之模块及包的导入】

    一.模块导入 1.定义 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块让你能够有逻辑地组织你的 Python ...

  4. python之模块、包的导入过程和开发规范

    摘要:导入模块.导入包.编程规范 以My_module为例,My_module的代码如下: __all__ = ['name','read'] print('in mymodule') name = ...

  5. DAY16 模块和包的导入

    一.包 1.包的定义 包:就是一系列模块的结合体 2.重点 1.包中一定要有一个专门来管理包中所有模块的文件 2.包名:存放一系列模块的文件夹名字 3.包名(包对象)存放的是管理模块的那个文件的地址, ...

  6. Day 16 模块和包的导入

    包的认识 包通过文件夹来管理一些列功能相近的模块 包:一系列模块的集合体 重点:包中一定有一个专门来管理包中所有模块的文件 包名:存放一系列模块的文件夹名字 包名(包对象)存放的是管理模块的那个文件地 ...

  7. Python中模块与包的导入(朴实易懂版的总结)

    这几天,被python包与模块的导入问题,折磨的不行,以前想的很简单,其实不然,经查资料研究,特总结如下: 基本注意点 模块:一般指一个py文件:包:含有许多py文件的文件夹,含有 或不含有(Pyth ...

  8. python的模块与包的导入

    类似于C语言的包含头文件去引用其他文件的函数,python也有类似的机制,常用的引入方法有以下 import 模块名 #模块名就是py文件名 #使用这种方法以后调用函数的时候要使用模块名.函数名()这 ...

  9. python 深入模块和包

    模块可以包含可执行语句以及函数的定义. 这些语句通常用于初始化模块. 它们只在 第一次 导入时执行.只在第一次导入的时候执行,第一次.妈蛋的第一次...后面再次导入就不执行了. [1](如果文件以脚本 ...

  10. 【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

随机推荐

  1. 牛客寒假算法基础集训营6 E 海啸

    题目链接点这里 这个题输入类型是第一次见,并没有把n和m的具体范围给你,但是给了n*m的范围,武断的设为1e6*1e6的二维数组铁铁WA,就将二维数组转换为一维数组 题目类型属于二维数组前缀和,有um ...

  2. 什么是V模型?使用SDLC和STLC学习案例研究

    本教程详细介绍了软件/系统开发生命周期(SDLC),如瀑布循环和迭代循环,如RAID和Agile.此外,它继续解释测试的V模型和STLC(软件测试生命周期). 假设为您分配了一项任务,即为客户开发自定 ...

  3. JComBox的用法

    JComboBox的使用: 类层次结构图:    java.lang.Object     --java.awt.Component      --java.awt.Container       - ...

  4. java 类加载机制和反射机制

    一.类的加载机制 jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程.(1)加载         将class文件字节码内容加载到内存中, ...

  5. PAT 1023 Have Fun with Numbers

    1023 Have Fun with Numbers (20 分)   Notice that the number 123456789 is a 9-digit number consisting ...

  6. Activiti手动执行的应用(UserTask)

    工作流模拟某公司请假流程情景如下:   1.开发人员请假流程,如果开发人员请假,如果请假天数小于3天,组长批准,人事批准即可请假.   2.如果请假大约三天,需要项目经理或者产品经理批准,并且项目总监 ...

  7. POJ - 题解sol[暂停更新]

    初期:一.基本算法: (1)枚举. (poj1753,poj2965) poj1753 话说我用高斯消元过了这题... poj2965 巧了,用高斯消元01矩阵更快(l o l). (2)贪心(poj ...

  8. select2中的ajax请求

    下面介绍select2.js的方法,已经整理好文件,可以直接下载使用: 实现效果如下: 引用文件:select2.min.css jquery.js select2.full.min.js <h ...

  9. Qt_自定义菜单

    一.右键菜单 右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现! 重写voidcontextMen ...

  10. linux ssh root登陆出现错误:Permission denied, please try again

    密码已检测过多遍还是登录失败 经检查 vim /etc/ssh/sshd_config PermitRootLogin no 改成 PermitRootLogin yes 修改之后重启就可以了