Python Day27

 

1、模块:

模块的定义

  模块就是一个py文件  调用一个模块的时候会自动运行这个模块

注意:     一个模块不会被导入多次
          不要在同一行 导入多个模块
 导入顺序    内置模块---第三方模块---自定义模块
 模块的 命名空间 --- 有单独的命名空间

   导入模块的时候 会创建一个模块的命名空间
  把里面的名字都绑定到自己的命名空间
重命名 可以 import my_module as mm 给模块重命名

 json -- pickle 操作都一样--可以把名字
 mysql---oracle ---sql
 只导入指定的方法  from .. import ..as .. 只导入指定的方法

   多个导入  from my_module import (read1 as read,
                                     read2 as read2,
                                      money as m)
 from... import *   ---- 不用加模块名 模块中的名字不要和文件里的冲突
 print(dir()) # 查看自己导入的模块
 import math ---- from math import pi (节省)---- from math import math
 模块里面 导入的模块 可以被使用  ---  一次导入 后便倒入的模块中也可以 使用这个模块
 *  --   __all__=[]  约束 *
  import sys ----  print(sys.modules) --当前引入的所有模块
  模块第一次导入的时候 已经放在内存里
 第一次导入
          import my_module 时 生成 pyc 编译文件 字节码
          第一次导入的时候 耗时间
          python -m my_module.py  强行生成pyc
 sys.path---找模块路径---丛路径找模块
     sys.modules --当前引入的所有模块
  __name__ ---  __main__  只在自己作为脚本的时候执行
                              用做脚本测试时  if __name__==‘__main__‘

    def login():       print(‘ads‘)

    if __name__==‘__main__‘:       login()
 dir(模块) --- 把模块的名字全部显示出来

2、包:

模块的定义

  模块就是一个py文件  调用一个模块的时候会自动运行这个模块

注意:     一个模块不会被导入多次
          不要在同一行 导入多个模块
 导入顺序    内置模块---第三方模块---自定义模块
 模块的 命名空间 --- 有单独的命名空间

   导入模块的时候 会创建一个模块的命名空间
  把里面的名字都绑定到自己的命名空间
重命名 可以 import my_module as mm 给模块重命名

 json -- pickle 操作都一样--可以把名字
 mysql---oracle ---sql
 只导入指定的方法  from .. import ..as .. 只导入指定的方法

   多个导入  from my_module import (read1 as read,
                                     read2 as read2,
                                      money as m)
 from... import *   ---- 不用加模块名 模块中的名字不要和文件里的冲突
 print(dir()) # 查看自己导入的模块
 import math ---- from math import pi (节省)---- from math import math
 模块里面 导入的模块 可以被使用  ---  一次导入 后便倒入的模块中也可以 使用这个模块
 *  --   __all__=[]  约束 *
  import sys ----  print(sys.modules) --当前引入的所有模块
  模块第一次导入的时候 已经放在内存里
 第一次导入
          import my_module 时 生成 pyc 编译文件 字节码
          第一次导入的时候 耗时间
          python -m my_module.py  强行生成pyc
 sys.path---找模块路径---丛路径找模块
     sys.modules --当前引入的所有模块
  __name__ ---  __main__  只在自己作为脚本的时候执行
                              用做脚本测试时  if __name__==‘__main__‘

    def login():       print(‘ads‘)

    if __name__==‘__main__‘:       login()
 dir(模块) --- 把模块的名字全部显示出来

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。

比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。

就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。

这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。

不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。

现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一组不断增加的模块,用来在不同的格式之间转换。

并且针对这些音频数据,还有很多不同的操作(比如混音,添加回声,增加均衡器功能,创建人造立体声效果),所你还需要一组怎么也写不完的模块来处理这些操作。

这里给出了一种可能的包结构(在分层的文件系统中):

sound/                          顶层包
      __init__.py               初始化 sound 包
      formats/                  文件格式转换子包
              __init__.py
              wavread.py
              wavwrite.py
              aiffread.py
              aiffwrite.py
              auread.py
              auwrite.py
              ...
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
              ...
      filters/                  filters 子包
              __init__.py
              equalizer.py
              vocoder.py
              karaoke.py
              ...

从一个包中导入*

设想一下,如果我们使用 from sound.effects import *会发生什么?

Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。

但是很不幸,这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。

在这类平台上,没有人敢担保一个叫做 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。

(例如,Windows 95就很讨厌的把每一个文件的首字母大写显示)而且 DOS 的 8+3 命名规则对长模块名称的处理会把问题搞得更纠结。

为了解决这个问题,只能烦劳包作者提供一个精确的包的索引了。

导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

 

作为包的作者,可别忘了在更新包之后保证 __all__ 也更新了啊。你说我就不这么做,我就不使用导入*这种用法,好吧,没问题,谁让你是老板呢。这里有一个例子,在:file:sounds/effects/__init__.py中包含如下代码:

__all__ = ["echo", "surround", "reverse"]

这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。

如果 __all__ 真的没有定义,那么使用from sound.effects import *这种语法的时候,就不会导入包 sound.effects 里的任何子模块。他只是把包sound.effects和它里面定义的所有内容导入进来(可能运行__init__.py里定义的初始化代码)。

这会把 __init__.py 里面定义的所有名字导入进来。并且他不会破坏掉我们在这句话之前导入的所有明确指定的模块。看下这部分代码:

import sound.effects.echo
import sound.effects.surround
from sound.effects import *
时间: 2024-11-16 01:07:07

Python Day27的相关文章

python,多线程应用示例

应用python的threading模块开启多线程执行程序,会缩短程序运行时间,下面代码演示了多线程应用 #不开启多线程演示 import time,threading def foo(n): print('foo%s'%n) time.sleep(1) def bar(n): print('bar%s'%n) time.sleep(2) begin = time.time() t1 = threading.Thread(target = foo,args = (1,)) t2 = thread

python 之路,Day27 - 主机管理+堡垒机系统开发

python 之路,Day27 - 主机管理+堡垒机系统开发 本节内容 需求讨论 构架设计 表结构设计 程序开发 1.需求讨论 实现对用户的权限管理,能访问哪些机器,在被访问的机器上有哪些权限 实现可以通过web页面对指定主机列表 进行 批量发布命令.文件 实现对用户操作进行纪录 2.架构设计 3. 表结构设计 参考 http://www.cnblogs.com/alex3714/articles/5286889.html 分类: Python自动化开发之路 好文要顶 关注我 收藏该文   金角

day27 反射、内置方法

一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) # print(isinstance(s,Son)) # print(isinstance(s,Foo)) # print(type(s) is Son) # print(type(s) is Foo) #判断一个类是不是另一类的子类,传两个参数(子类,父类) print(issubclass(So

Python开发基础-Day25-28FTP项目(待补充)

optparse C:\Users\Mr.chai>python C:/Users/Mr.chai/Desktop/PythonProject/DAY/day27/LuffyFTP/client/luffy_client.py -hUsage: luffy_client.py [options] Options: -h, --help show this help message and exit -s SERVER, --server=SERVER ftp server ip_addr -P

python 作业

Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与寄存器,内核态与用户态及如何切换 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 磁带 设备驱动与控制器 总线与南桥和北桥 操作系统的启动流程 应用程序的启动流程 day02 作业要求一:整理操作系统博客 为何

Python学习1-Python和Pycharm的下载与安装

本文主要介绍Python的下载安装和Python编辑器Pycharm的下载与安装. 一.Python的下载与安装 1.下载 到Python官网上下载Python的安装文件,进入网站后显示如下图: 网速访问慢的话可直接在这里下载:python-2.7.11.amd64 在Downloads中有对应的支持的平台,这里我们是在Windows平台下运行,所以点击Windows,出现如下: 在这里显示了Python更新的所有版本,其中最上面两行分别是Python2.X和Python3.X对应的最后更新版本

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但

python学习_day26_面向对象之封装

1.私有属性 (1)动态属性 在python中用双下划线开头的方式将属性隐藏起来.类中所有双下划线开头的名称,如__x都会自动变形成:_类名__x的形式.这种自动变形的特点是: a.类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果.b.这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的.c.在子类定义的__x不会覆盖在父类定义的__x,因为子类中变形成了:_子类名__x,而父类中变形成了:_父类名__x,即双下滑线开头的属性在继承给子类时,子类是无法覆

python面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.class 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类. 继承:即一个派生类(de