python学习笔记,day4

1、类的浅拷贝与深拷贝

变量的赋值操作:只是形成两个变量,实际上还是指向同一个对象

浅拷贝:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象

深拷贝:使用copy模板的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同

eg:

class Cpu:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk
#变量的赋值
cpu1=Cpu()
cpu2=cpu1

print(cpu1,id(cpu1))
print(cpu2,id(cpu2))
print('------------------------')
disk1=Disk()
print(disk1,id(disk1))
computer1=Computer(cpu1,disk1)
print(computer1,computer1.cpu,computer1.disk)
import  copy
computer2=copy.copy(computer1)
print(computer2,computer2.cpu,computer2.disk)
print('------------深拷贝------------')
computer3=copy.deepcopy(computer1)
print(computer3,computer3.cpu,computer3.disk)

浅拷贝只换id,深拷贝全部都换

2、模块(modules)

函数与模块的关系:一个模块中可以包含N多个函数

一个扩展名为.py的文件就是一个模块

使用模块的好处:

方便其他程序和脚本的导入并使用;

避免函数名和变量名冲突;

提高代码的可维护性;

提高代码的可重用性

3、模块的导入

创建模块:新建.py文件,名称尽量不要与python自带的标准模块名称相同

导入模块:

import  模块名称  [as别名]

from   模块名称  import    函数/变量/类

eg:

calc.py

def add(a,b):
    return (a+b)
def div(a,b):
    return (a/b)

demo.py

import calc
print(calc.add(10,30))

4、以主程序方式运行

在每个模块的定义中都包括一个记录模块名称的变量__name__,程序可以检查该变量,以确定他们在哪个模块中执行,如果一个模块不是被导入到其他程序中执行,那么它可能在解释器的顶级模块中执行,顶级模块的__name__变量的值为__main__

if __name__='__main__':

       pass

5、python中的包

包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下

作用:代码规范,避免模块名称冲突

包与目录的区别:

包含__init__.py文件的目录称为包;目录里通常不包含__init__.py文件

包的导入:import 包名.模块名

import只可以导入包和模块,但from..import...可以导入包,模块,变量名

你可能感兴趣的:(学习)