垃圾回收
- 在程序中产生的垃圾会影响到程序的性能,所以垃圾要及时清理
- 垃圾指的是没有用的文件
- 在程序中没有被引用的才是垃圾
- 所谓垃圾回收就是将垃圾对象从内存中删除
class grabage:
def __init__(self, name):
self.name = name
def __del__(self):
print('如果我执行了,说明进行了垃圾回收', self)
r = grabage('垃圾回收')
print(r)
a = input('任意键退出,通过我判别垃圾回收')
# <__main__.grabage object at 0x000001C8557A8DC8>
# 任意键退出,通过我判别垃圾回收
# 如果我执行了,说明进行了垃圾回收 <__main__.grabage object at 0x000001C8557A8DC8>
我们观察上面结果:
先打印了r对象的内存地址
出现了input语句中的内容
按下任意键后,python做了垃圾回收的动作
class grabage:
def __init__(self, name):
self.name = name
def __del__(self):
print('如果我执行了,说明进行了垃圾回收', self)
r = grabage('垃圾回收')
r = None
print(r)
a = input('任意键退出,通过我判别垃圾回收')
# 如果我执行了,说明进行了垃圾回收 <__main__.grabage object at 0x0000027454458DC8>
# None
# 任意键退出,通过我判别垃圾回收
如果在程序结束前,我不再调用grabage对象,那么python会将先将其回收,再执行下一步
模块
模块化
- 模块化 指将一个完整地程序分解成一个一个小模块
- 通过将模块组合,来搭建出一个完整地程序
模块化的优点
- 方便开发
- 方便维护
- 模块的复用
模块的创建
- 在python中一个py文件就是一个模块
在一个模块中引入外部模块
import …
- 第一种import 模块名(模块名指的就是py文件名)
- 可以引入同一个模块多次,但是模块的实例只会创建一次
我在统计目录下创建了一个text2.py,里面输入print(‘life is short,you need python’)
import text2
import text2
import text2
# life is short,you need python
import 模块名 as …
- 第二种,import 后对模块重新命名
import text2 as t2
# life is short,you need python
from 模块名 import …
- 第三种,引入模块中的部分变量or函数or对象
- 这种方法可以引入多个,用逗号隔开
- 引入的部分如果是对象,记得重新赋值,因为不能调用整个对象
- 如果不知道模块里有什么变量名,可以用*号,全部引用,这是方式是把子模块的中代码复制到主模块,如果有重名的变量,会出现覆盖
from text2 import a, A, Aa
print(a)
A()
new_Aa = Aa('Ares')
print(new_Aa.name)
# 1
# 我是text2函数A
# Ares
from text2 import *
a = 2
print(a)
A()
new_Aa = Aa('Ares')
print(new_Aa.name)
# 2
# 我是text2函数A
# Ares
import * 如果修改了变量,会出现覆盖的情况,如上打印a,值为2了
from 模块名 import … as …
- 第四种,引入模块中的部分变量or函数or对象,并重新命名
from text2 import Aa as name
new_Aa = name(‘Ares’)
print(new_Aa.name)
Ares
name
- 在每一个模块内部都有一个__name__,通过它来获得模块的名字
- name 属性值为__main__的模式是主模块,一个程序当中只有一个主模块
- 主模块就是通过python直接执行的模块
在text2模块中
print(__name__)
# __main__
在text1模块中
import text2
# text2
模块的使用
- 模块中可以定义变量、函数、类
- 访问模块中的变量,语法: 模块名.变量名
- 访问模块中的函数,语法: 模块名.函数名
- 访问模块中的对象,语法: 模块名.对象名
# text2.py
a = 1
def A():
print('我是函数A')
class Aa():
def __init__(self, name):
self.name = name
import text2
print(text2.a)
text2.A()
t1 = text2.Aa('like you')
print(t1.name)
# 1
# 我是函数A
# like you
if name == 'main’
- 如果在text2中有些代码,我们不希望被人调用或是不希望在text中显示,可以通过if name == ‘main’:
- 其原理结合上面__name__来理解
text2中
_a = 1
class Aa():
def __init__(self, name):
self.name = name
if __name__ == "__main__":
def A():
print('我是text2函数A')
A()
# 我是text2函数A
上面代码中a变量前有一个下划线,其含义是作者不希望你修改该变量,但是该方法是防君子不防小人
text1中
import text2
text2.A()
# File "f:/my_dream/text.py", line 3, in <module>
# text2.A()
# AttributeError: module 'text2' has no attribute 'A'