Python学习第十二天

类的赋值与深浅拷贝

  1. 类的赋值
    实际上指向的还是同一对象,只是用两个变量来表示。

class A:
    pass

a = A()
b = a
print(a is b)

####
True
  1. 浅拷贝
    Python拷贝一般都是浅拷贝。
class Cpu:
    pass


class Disk:
    pass


class Computer:
    def __init__(self, cpu, disk):
        self.cpu = cpu
        self.disk = disk


cpu = Cpu()
disk = Disk()
c1 = Computer(cpu, disk)
import copy

c2 = copy.copy(c1)
print(c1, c1.cpu, c1.disk)
print(c2, c2.cpu, c2.disk)

####
<__main__.Computer object at 0x10cefcf70> <__main__.Cpu object at 0x10cefcfd0> <__main__.Disk object at 0x10cefcfa0>
<__main__.Computer object at 0x10cefcd90> <__main__.Cpu object at 0x10cefcfd0> <__main__.Disk object at 0x10cefcfa0>

可以看到,c1和c2是不同的对象,但是组成对象的子对象确实相同的。
3. 深拷贝
使用deepcopy来执行,组成对象的子对象是不同的。


c2 = copy.deepcopy(c1)
print(c1, c1.cpu, c1.disk)
print(c2, c2.cpu, c2.disk)

####
<__main__.Computer object at 0x101163f70> <__main__.Cpu object at 0x101163fd0> <__main__.Disk object at 0x101163fa0>
<__main__.Computer object at 0x101163d30> <__main__.Cpu object at 0x1011636d0> <__main__.Disk object at 0x101163670>

模块

一个py文件就是一个模块,可以包含类、函数、变量等。

# mymod.py
def fun():
    print('mymod的fun()函数')

# main.py
import mymod

mymod.fun()

####
mymod的fun()函数

自定义模块

名称尽量不要与python自带的标准模块相同。
导入模块语法:

import 模块  [as 别名]
from 模块 import 类/函数/变量

查看math模块:

import math

print(dir(math))

####
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

以主函数的形式运行

每个模块都有一个名称__name__,如果一个模块没有导入到其他模块中,那么它有可能是顶级模块,顶级模块的__name__ = __main__
语法:

if __name__ == '__main__':
      pass

包是一个分层次的目录结构,将一组功能相近的模块放到同一个目录下,包含__init__.py文件。
包的导入:import 包名.类名/函数名/变量名..

内置模块

import sys
import time

print(sys.getsizeof(0), sys.getsizeof(1))
print(sys.getsizeof(False), sys.getsizeof(True))

print(time.time())
print(time.localtime(time.time()))

####
24 28
24 28
1612779887.052952
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=18, tm_min=24, tm_sec=47, tm_wday=0, tm_yday=39, tm_isdst=0)

第三方模块的安装

使用pip install 模块来安装

文件

使用内置函数open()来创建文件对象,

常用文件打开方式

文件的常用方法

with语句

可以自动管理上下文的资源,无论发生什么跳出with块,都会释放资源。

posted @ 2021-02-08 15:40  sxhyyq  阅读(39)  评论(0编辑  收藏  举报