一、垃圾回收
在程序中产生的垃圾会影响程序的性能,因此需要及时进行垃圾处理
什么是垃圾呢?
垃圾就是没有用的东西
在程序中垃圾就是没有被引用的内容
class A():
def __init__(self,name):
self.name = name
a = A('小明')
print(a.name)
a = 10
在这个程序中变量a被重新赋值给了整型10,则实例对象A() 就成了垃圾
所谓垃圾回收就是将程序中没有被引用的对象进行删除
class A():
def __init__(self,name):
self.name = name
#会在对象删除前自动调用该方法
def __del__(self):
#该语句执行了,说明test()被删除了
print('A()被删除了')
a = A('小明')
print(a.name)
a = 10
#防止程序结束,程序结束,A()会被自动删除
input('退出程序....')
二、模块的简介
在python中一个py文件就是一个模块
模块化就是将一个完整的程序分解成一个个的小功能(py文件)来实现
通过将模块进行组合,来搭建一个完整的程序
例:搭建一个淘宝平台:
登录页面、浏览页面、购物车页面等都是一个个的模块,而整个淘宝平台就是一个完整的程序。
使用模块的优点:
1.方便开发,每个人可以负责一个小模块,合作开发效率高
2.方便维护,哪一块代码有问题,直接修改该模块就可以
3.模块复用,某些模块的功能是可以重复使用的,只需小的改动就可应用到新的程序,加快开发进程
三、模块的创建
在一个模块中引入一个外部模块
可以多次引入同一个模块,但模块的实例只能创建一次
第一种方式: import 模块名
import test1
print (test1)
输出结果:
这是一个test模块 #test1中代码
<module 'test1' from 'F:\\code\\test1.py'> #test1对象
第二种方式: import 模块名 as 别名
import test1 as abc #引入test1但将模块名test1修改为abc
print(abc) #输出abc对象(即test1对象)
在每一个模块内部都有一个__name__属性,我们可以通过该属性来获得模块的名字
在test1 中写入
print(__name__)
运行test1输出:
__main__
在test中引入test1
import test1
运行test 输出:
test1 #运行test1中的代码,输出被引入的模块名
每个程序都只有一个主模块,其__name__ 的属性值为__main__
所谓主模块就是在程序中Python直接执行的模块,而不是通过引入而执行的模块
四、模块的使用
1.访问引入模块中的变量
语法:模块名.变量名
2.访问引入模块中的函数
语法:模块名.函数名
3.访问引入模块中的类
语法:模块名.类名(实参1,实参2…)
test1中代码
a = 1
b = 2
def fn():
print('这是test1中的函数')
class Person():
def __init__(self,name):
self.name = name
test中的代码
import test1
print(test1.a) #访问test1中的变量
test1.fn() #访问test1中的函数
p = test1.Person('葫芦娃') #访问test1中的类
print(p.name)
第三种方式:引入模块中的部分功能
from 模块名 import 功能名(变量,函数…)
from test1 import fn,Person
fn() #调用引入的fn函数功能
print(fn) #打印fn对象
p = Person('葫芦娃')
print(p)
print(test1) #报错,因为引入的是模块中的部分功能fn,Person,而不是整个模块
若想引入模块中的全部功能可以使用一下语法
from 模块名 import *
from test1 import *
该方法相当于将test1中的所有代码复制到主模块中,如果主模块中有和test1模块相同的对象,且该行代码在该对象后,则test1中的该对象会覆盖主模块中的该对象
test1中代码
a = 1
b = 2
def fn():
print('这是test1中的函数')
class Person():
def __init__(self,name):
self.name = name
test中的代码
def fn():
print('这是主模块中的函数....')
from test1 import *
fn() #会调用test1中的fn函数,而不是执行主模块中的fn函数
使用import test1 则不会出现这种情况,所以一般推荐使用该方法引入某一模块的全部功能。
第四种引入方式,引入模块中的部分功能并修改该功能的名称:
from 模块名 import 变量 as 变量别名
from test1 import fn as new_fn
new_fn() #调用test1中的fn函数
五、模块中的一些注意事项
1.模块中如何定义私有变量?
在该变量前添加下划线即默认该变量为私有
import test1
test1._c #仍然可以被访问,但一般程序员不会去访问该变量
from test1 import *
test1._c #报错
2.模块中的某些代码,我们只希望他在当前文件中执行,当其被其他模块引入时,这些代码并不会执行,该如何实现呢?
判断当前模块是否为主模块,是则执行该代码,不是则不执行
test1中代码
a = 1
b = 2
def fn():
print('这是test1中的函数')
class Person():
def __init__(self,name):
self.name = name
#该代码块只在test1中执行,其他模块引入该模块时,以下代码不会执行
if __name__ =='__main__':
p = Person('葫芦娃')
print(p.name)
fn()
test中的代码
import test1
test中并不会执行条件控制语句中的代码。