2023-6-9

1.网络训练:

在训练前先要看看读取数据的时间(常见的性能瓶颈)

2.import dis

dis 是 Python 内置的一个模块,其全称为 “Disassembler for Python bytecode”,用于反汇编 Python 字节码。它可以将 Python 代码编译成字节码形式,并显示出字节码的操作码(opcode),以及相应的操作数和常量等信息。

在使用 dis 模块时,需要先定义需要反汇编的函数或代码块,然后使用 dis.dis() 函数进行反汇编操作。

3. [0] * 3 [0, 0, 0] [0 for _ in range(3)] 三者内存不同 (cpython 源码问题)

[0] * 3 的内存分配 空的list为56个byte 一个指针为8个byte 56 + 8 * 3 = 80 内存空间为80byte (空间使用最小)

[0, 0, 0] 直接申请8个指针 8*8 + 56 = 120

[0 for _ in range(3)]申请 4个指针 4*8 +56 =88

4 默认参数问题:

在这里插入图片描述
如上代码,因为大多数人的items都为[],所以在class中默认items=[],但是在更新p1和p2的时候出错,因为p1 和 p2 的items 指向同一块内存空间。在这里插入图片描述
如图所示,所以不能使用这种方法对参数进行初始化操作,如果需要这种功能,则需要用以下方法:
在这里插入图片描述

5. 列表推导式

[变量 for 变量 in iterable(可迭代对象)]
(1)生成 1-9的平方 [1, 4, 9, 16, 25, 36, 49, 64, 81]
    
    [i*i for i in range(1, 10)]

(2)生成1到10中的偶数 [2, 4, 6, 8]

[i for i in range(1, 10) if i % 2 == 0]

(3)生成1到10中每个偶数的平方,三次方,四次方组成一个列表
在这里插入图片描述

[[x ** i for i in [2, 3, 4] for x in range(1, 11) if x % 2 == 0]]

6. matplotlib b站视频:(https://www.bilibili.com/video/BV1Pe4y1R79d/?spm_id_from=333.337.search-card.all.click&vd_source=bc3cd51950b607b63949ae5696d82dc2)

from matplotlib import pyplot as plt
fig, array = plt.subplots(3, 3)
print(fig) # fig = Figure(640x480)
print(array)
 # array = 
#[[<Axes: > <Axes: > <Axes: >]
# [<Axes: > <Axes: > <Axes: >]
# [<Axes: > <Axes: > <Axes: >]]

在这里插入图片描述
在这里插入图片描述
代码1:
在这里插入图片描述
代码2:
在这里插入图片描述
两个代码画出的图都为:
在这里插入图片描述
下面的图为画2*2的图

在这里插入图片描述
下面为fig的使用
使用fig写出整个图像的题目和x轴y轴

7. enumerate

产生原因: 例如 a = [23, 12 ,123, 34] 我们要打印出每个元素 并且需要知道每个元素所在的index

 for i in a:
 	print(i) # 这样无法得知每个元素的index
 for i, v in enumerate(a, start=1): # start 默认值为0 如果改为1则默认从1开始数
 	print(i, v) # i为index v为值

8. zip

a = ['1', '2', '3']
b = ['a', 'b', 'c']
for i, j in zip(a, b):
	print(i, j)
# 输出结果为 1 a \n 2 b \n 3 c
for i in zip(a, b):
	print(i)
# 输出结果为 ('1', 'a') \n ('2', 'b') \n ('3', 'c')

9.layer._class_._name_ 为输出一层的名字

10. 迭代器

迭代器的定义:
1.类中定义了__iter__和__next__两个方法
2.__iter__返回对象本身,即self
3.__next__返回下一个数据,如果没有数据,则抛出一个StopIteration的异常

我们创建一个迭代器类型
在这里插入图片描述
之后创建一个迭代器对象

obj1 = IT()
v1 = next(obj1)
v2 = next(obj1)
v3 = next(obj1) # 抛出异常

obj2 = IT()
for item in obj2:
	print(item)
# 迭代器在for循环内部首先会执行迭代器对象的__iter__方法并且获取返回值 返回本身 之后一直会反复执行next(对象)

11 生成器 (是特殊的迭代器)

使用yield关键字返回每次要返回的值
列表推导式的[]换为()就是生成器
[i for i in range(666666)] 直接把666666个元素装到列表中
(i for i in range(666666)) 记住规则 从0开始 每次加1
return 和 yield
到return 后就不执行函数后边的东西了
yield
在这里插入图片描述
在这里插入图片描述
yield后边没跟数字所以返回None
在这里插入图片描述
特别的 net.parameters()为生成器对象

12 可迭代对象 如果一个类中有__iter__方法(不一定有__next__)并且返回一个迭代器(生成器是特殊的迭代器 )对象:则称这个类创建的对象为可迭代对象。

区分可迭代对象和迭代器对象(都可以用for loop)
迭代器对象返回自己 可迭代对象返回一个迭代器

在这里插入图片描述IT为迭代器对象 Foo为可迭代对象

v1 = range(10) v1 为可迭代对象

生成自定义range:
在这里插入图片描述
常见数据类型
v1 = list([1,2,3,4])
v1为可迭代对象,因为声明了__iter__方法并且返回了一个迭代器对象

判断是否为迭代器或可迭代对象
在这里插入图片描述
Iterator 判断是否为迭代器对象__iter__和__next__
Iterable 判断是否为可迭代对象__iter__
两个都为True则为迭代器 一个True 一个False为可迭代对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抽象带篮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值