python基础 - 17 模块

一、垃圾回收

在程序中产生的垃圾会影响程序的性能,因此需要及时进行垃圾处理

什么是垃圾呢?
垃圾就是没有用的东西
在程序中垃圾就是没有被引用的内容

   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中并不会执行条件控制语句中的代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值