2019/08/29 python模块和包简介(06)

python还支持装饰器:
本身也是一个函数:用来修饰另外的函数的,以实现透明地增强被包装对象的功能;
如何调用:
@装饰器名称,一般都需要出现在函数或类定义之前,类也可以被装饰器所装饰,可以使得函数被不同增强后重用
在这里插入图片描述
可以先定义个函数就叫装饰器,里面内层函数叫wrapper包装,再python中,函数可以作为参数使用的,把函数在此处调用一下,
把包装后的结果,当作函数返回
在这里插入图片描述
定义被包装函数之前先做下装饰在这里插入图片描述
也可以向装饰器传递参数,可以定义向wrapper传递参数,这种叫能够接收参数的装饰器,

函数还可以递归的,函数在运行过程中不断调用自己,但是需要触发某个条件返回,

利用递归写一个阶乘函数;函数属于python中的可调用对象

在这里插入图片描述
模块:
模块也是个对象
import copy,
等于创建一个模块对象,并且可以通过整个模块对象的名称空间copy来引用
模块本身也是个容器,容器内部可以保存许多对象,这些对象是通过import指令加载进来的,import math,就可以把math整个名称赋值给对象,模块有名称,引用名称就是模块名称,

因此模块自己会定义容器,这个容器内部有自己许多属性,属性就是在模块中定义的全局变量,或者其他的名称,在python中,名称可以引用 各种各样的对象,只要是在python顶格定义的都是全局变量

如果想要获取现在拥有的模块列表,help获取,列出目前系统上所有可用的模块在这里插入图片描述在这里插入图片描述
任何一个模块都可用使用import进行导入
对copy这个模块来讲,有内建的方法,dict,保存了与copy模块相关的所有字典
在这里插入图片描述
doc可用找一个模块的文档在这里插入图片描述
模块自己的名称可以用name来引用
在这里插入图片描述

file加载的文件在什么地方,任何一个模块其实都是python程序文件而已
在这里插入图片描述

help(“modules”)想要知道所有模块,没有就要去安装
要使用模块就使用import来导入,还有另外一个命令
(如果不用模块,就需要把所有代码写到一个文件中,有了模块,就可以把一个程序分散到多个文件中 )
模块的名称就是去掉.py结尾前面的部分,每个模块都回引入自己的名称空间,python程序允许在当前模块中导入其他模块以便重用

模块导入:
一个模块文件被别的模块导入以后,这个模块的所有属性在另外一个文件,在导入方中,都可用调用了
python的程序架构可能是这样的:
由一个顶层文件(主程序),控制程序执行流,以及一个或多个模块文件组成,模块完成各种功能组件(比如模块1完成某个文件的过滤,模块2实现编辑);
模块只有被顶层文件调用的时候才执行,模块设计就是用来调用和导入的。没有导入就不会执行,但如果写的模块函数,要测试是否能够执行,不调用就不能执行,在模块中自己写代码,自己调用自己,可以明确说明,只有自己直接执行时,才把找个模块里面调用的函数做一次测试,否则只有被导入才会执行

比如有个模块copy,中间有个属性叫deepcopy
在这里插入图片描述
导入模块:
import:导入指定的模块整体,会引入新的名称空间,即模块名;
import copy
调用 copy.deepcopy()
可以导入多个模块
import mode1[,mode2,…]
import mod1 as mod1_alias 直接在导入时直接别名
from-import:导入指定的模块的部分属性,把模块的属性直接引入到当前名称空间
可以仅导入 deepcopy
from copy import deepcopy
就可以直接使用 deepcopy()调用

import和from-import都是可执行语句。类似def,可以嵌套在测试中直接执行,所以来自模块的属性,只有在import语句执行之后才会运行
不同在于,import是将整个模块对象赋值给一个模块变量名称来实现的
from-import语句是将一个或多个变量名直接赋值到当前名称空间的同名变量来实现
如果整个模块导入相当于创建一个模块对象,把它赋值给一个名称叫模块名的,使用from-import相当于,,没有创建任何模块对象,仅仅是从模块中,把它的属性给创建了一个对象,
如果使用import导入copy,相当于创建了一个模块对象叫copy,可以用这个对象来引用模块内的所有属性,
对from-import,相当于创建了一个deepcopy的函数对象,,因为deepcopy是一个方法,没有创建模块对象,而是创建某一个具体对象,而是在当前空间也创建同一个名字而已
在这里插入图片描述
import语句在导入指定模块时,会执行三个步骤:
1.找到模块文件(跟系统找命令一样,path环境变量下去找)要在指定路径下搜索模块文件,搜索到以后,编译成字节码,而后导入
三步:搜索,编译,导入.

模块搜索路径:
程序的主目录
pythonpath变量中定义的各目录:
标准链接库目录;
任何.pth结尾的文件中定义的路径;
sys.path所包含的路径:

查看当前系统怎么找模块的,如果想要导入模块,只要把这个列表append新路径即可在这里插入图片描述在这里插入图片描述

如果有大量模块需要一次导入,可以把模块打包起来做成一个包
包:将一组模块归并到一个目录,此目录即为包;
基于包导入需要使用:
import dir1.dir2.mod1,这个dir1就是包名
使用包,包自身在模块搜索文档路径中,包要按照特定格式组织

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值