python模块

垃圾回收

  • 在程序中产生的垃圾会影响到程序的性能,所以垃圾要及时清理
  • 垃圾指的是没有用的文件
  • 在程序中没有被引用的才是垃圾
  • 所谓垃圾回收就是将垃圾对象从内存中删除
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会将先将其回收,再执行下一步

模块

模块化

  • 模块化 指将一个完整地程序分解成一个一个小模块
  • 通过将模块组合,来搭建出一个完整地程序

模块化的优点

  1. 方便开发
  2. 方便维护
  3. 模块的复用

模块的创建

  • 在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'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值