模块
1.1 垃圾回收
在程序中产生的垃圾会影响到我们程序的性能,所以这些垃圾要及时清理掉
1 先解释一下__del__方法,它是类中自己定义的垃圾清理方法,不用自己定义,下面例子中修改是为了更好的理解清除机制
下面举个例子分四种情况来具体说明一下说明一下Python的垃圾回收机制
class Del:
# 先定义一个类
def __init__(self):
self.name = 'Del类'
def __del__(self):
print('Del()对象被删除了....',self)
1 第一种情况
d = Del()
print(d.name)
input('按回车退出.....')
运行结果
Del类
按回车退出.....
可以看出程序执行时Del类并没有被删除
2 第二种情况
可是当我们输入回车后,程序执行完自动删除了Del()
运行结果
Del()对象被删除了....
<__main__.Del object at 0x000001CB039C0A58>
3 第三种情况
d = Del()
print(d.name)
d = 3 # 当我们给b赋值时,此时没有对Del()进行引用时
input('按回车退出.....')
运行结果
Del类
Del()对象被删除了.... <__main__.Del object at 0x000002C91D900A58>
按回车退出.....
说明下面没有对Del()进行引用时会自动被删除
4 第四种情况
d = Del()
a = d
print(a.name)
d = 3 # 当我们给bf赋值时,此时没有对Del()进行引用时
input('按回车退出.....')
运行结果
Del类
按回车退出.....
可以看出此时将d赋值给a,说明a正在调用,所以不删除Del()
最后总结一下
1 在程序中没有被引用的对象是垃圾,会被清理
2 执行完的类或者方法也是垃圾,会被清理
1.2 模块的简介
1 首先来解释一下模块化是什么?
模块化 指的是将一个完整的程序分解成一个一个小模块,通过将模块组合,来搭建出一个完整的程序
2 使用模块化的优点
1.方便开发
2.方便维护
3.模块的复用
1.3 模块的创建
! 首先来解释一下什么是模块
在Python当中一个py文件就是一个模块
2 介绍一下在一个模块中引入外部模块的方法
1 import 模块名(模块名指的句是Python的文件名)
下面举例使用一下
首先创建一个名字为模块1的模块里面写入一句可执行的语句
print(‘第一个模块’)
模块1
a = 1
b = 2
def name():
print('这是我的第一个模块')
class Person:
age = 8
def __init__(self,age):
self.age = age
def age1(self):
print('我在%d岁的时候写了第一个模块'%self.age)
if __name__ == '__main__':
name()
在一个新建的文件里
import 模块1 # 导入模块1模块
运行结果
第一个模块
可以引入同一个模块多次,但是模块的实例只会创建一次
import 模块1
import 模块1
import 模块1
运行结果
第一个模块
2 import 模块名 as 模块别名
import 模块1
print(模块1)
# 第一个模块
# <module '模块1' from 'D:\\新建文件夹\\模块1.py'>
使用 import 模块名 as 模块别名后
import 模块1 as test1
print(模块1)
# NameError: name '模块1' is not defined
print(test1)
# 第一个模块
# <module '模块1' from 'D:\\新建文件夹\\模块1.py'>
这个例子说明模块名在使用模块别名修改后就不能再调用原来的模块名
介绍一下如何获取调用的模块的名字
在每一个模块内部都有一个__name__,通过他可以获得模块的名字
给模块1中写入 print(name) 语句
执行语句
import 模块1 as test1
# 第一个模块
# 模块1 # 得到了test1调用模块的名字
name 属性值为__main__的模式是主模块 ,一个程序当中也只有一个主模块,主模块就是通过Python直接执行的模块
import 模块1 as test1
print(__name__)
# 第一个模块
# 模块1
main# 说明__name__ 属性值为__main__的模式是主模块 ,一个程序当中也只有一个主模块,这个__name__其实就是此程序中的主模块
1.4 模块的使用
1 导入整个模块的两种方法
(1)语法是 import 模块名,访问变量时要加上 模块名. , 这种方法的好处是如果代码里有相同名字的函数等变量时和原模块当中的互不影响
import 模块1
# 访问模块中的变量 语法是: 模块名.变量名
print(模块1.a,模块1.b)
# 1 2
# 访问模块中的函数 语法是: 模块名.函数名
模块1.name()
# 这是我的第一个模块
# 访问模块中的对象 语法是: 模块名.对象名
p = 模块1.Person(8)
p.age1()
# 我在8岁的时候写了第一个模块
(2)语法是 import 模块名,访问变量可以直接进行访问,不用加 模块名.
z这种方法的好处是如果代码里有相同名字的函数等变量时和原模块当中的会会相互影响
from 模块1 import *
name()
# 这是我的第一个模块
def name():
print('佩奇')
name()
# 佩奇
说明覆盖了模块里面的name()函数
2 导入模块的部分内容, 访问变量时不需要加上 模块名.
语法是: from 模块名 import 变量,变量,变量…
from 模块1 import Person,name,a,b
print(a)
print(b)
name()
# 1
# 2
# 这是我的第一个模块
p = Person(8) #
p.age1()
# 我在8岁的时候写了第一个模块
3 语法是: from 模块名 import 变量 as 别名
from 模块1 import Person as Per
p = Per(7)
p.age1()
# 我在7岁的时候写了第一个模块
1.5 自定义模块编写测试代码
当自定义模块编写完成之后,需要编写一些测试代码,检验模块中各个功能是否都能正常运行,并且不会在调用模块的程序中运行
由于模块就是一段 Python 程序,因此只要模块中包含可执行代码,就可以直接执行模块中的程序
语法格式
if name == ‘main’:
测试的语句
比如模块1中添加
if name == ‘main’:
name()
现导入模块1,运行程序
import 模块1
# 模块1
说明name()函数并没有运行
可是在模块1 中
a = 1
b = 2
print(__name__)
def name():
print('这是我的第一个模块')
class Person:
age = 8
def __init__(self,age):
self.age = age
def age1(self):
print('我在%d岁的时候写了第一个模块'%self.age)
if __name__ == '__main__':
name()
运行结果
__main__
这是我的第一个模块
name()函数执行了