内容介绍
1、类的浅拷贝与深拷贝(接十三)
2、什么叫模块
3、自定义模块
4、以主程序的形式执行
5、Python中的包
6、第三方模块的安装及使用
1、类的浅拷贝与深拷贝
变量的赋值操作
只是形成两个变量,实际上还是同一个对象
class CPU:
pass
class Dick:
pass
class Computer:
def __init__(self,cpu,disk):
self.cpu=cpu
self.disk=disk
#变量的赋值
cpu1=CPU()
cpu2=cpu1
print(cpu1) #<__main__.CPU object at 0x00000165382E7100>
print(cpu2) #<__main__.CPU object at 0x00000165382E7100>
浅拷贝
Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,原对象与靠背对象会引用同一个子对象
#变量的赋值
cpu1=CPU()
cpu2=cpu1
print(cpu1)
print(cpu2)
disk=Disk()
computer=Computer(cpu1,disk)
#浅拷贝
import copy
computer2=copy.copy(computer)
print(computer,computer.cpu,computer.disk)
#<__main__.Computer object at 0x0000019F9C1C7100>
# <__main__.CPU object at 0x0000019F9C1986D0>
# <__main__.Dick object at 0x0000019F9C198670>
print(computer2,computer2.cpu,computer2.disk)
#<__main__.Computer object at 0x0000019F9C1C7100>
# <__main__.CPU object at 0x0000019F9C1986D0>
# <__main__.Dick object at 0x0000019F9C198670>
深拷贝
使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同
#深拷贝
computer3=copy.deepcopy(computer)
print(computer,computer.cpu,computer.disk)
#<__main__.Computer object at 0x0000028248F67100>
# <__main__.CPU object at 0x0000028248B186D0>
# <__main__.Disk object at 0x0000028248B18670>
print(computer3,computer3.cpu,computer3.disk)
#<__main__.Computer object at 0x0000028248F67100>
# <__main__.CPU object at 0x0000028248B186D0>
# <__main__.Disk object at 0x0000028248B18670>
2、什么叫模块
3、自定义模块
创建模块
新建一个 .py文件,名称尽量不要与Python自带的标准模块名称相同
import main as bieling
import math
print(id(math))
print(type(math))
print(math)
print(math.pi)
print(dir(math))
from math import pi
print(pi)
4、以主程序形式运行
在每个模块的定义都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其他程序中执行,那么它可能在解释器顶级模块中执行。顶级模块的__name__变量的值为__main__
def add(a,b):
return a+b
#只有当点击运行此模块时才执行此段
if __name__ == '__main__':
print(add(10,20))
5、Python中的包
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
作用:代码规范、避免模块名称冲突
包与目录的区别:包含__init__.py文件的目录称为包
目录里通常不包含__init__.py文件
包的导入:import 包名.模块名
使用import方式进行导入时,只能跟包名或模块名
使用from 包名/模块名 import 模块名/函数、变量名
6、第三方模块的安装及使用
import schedule
import time
def job():
print('每两秒输出文字')
schedule.every(2).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)