只可惜到了期末,笔记写了但还没得及系统性的整理,而且后面关键的图像识别部分也没时间去学,希望等放假了再花时间好好学;(
笔记2
列表
random() 方法返回随机生成的一个实数,它在[0,1)范围内
import random
random.random()
randint函数,返回指定范围的一个随机整数,包含上下限
len获取列表长度
extend
append
切片的语法:[起始:结束:步长]
sort自动排序
reverse原地反转列表元素顺序
列表.sort(reverse=Ture)
count查找列表中的元素出现次数
index(start.end)获取列表中指定元素的索引值,指定查找的开始和结束位置
故替换指定元素的操作为 列表[hero.index("元素")]=替换对象
copy 拷贝一个列表 ,浅拷贝,处理一维列表,难以处理嵌套列表
列表1 = 列表2.copy() 把列表2的元素复制给列表1
切片的方法也可以办到
y =x[:]
列表加法
列表乘法,将列表内元素重复若干次,类似拷贝(拷贝引用),故列表使用*后
list = [[]]*3
list.append[3]
结果输出为[[3],[3],[3]]
print()换行
print(ea,end=' ')输出时添加空格
range返回一个可迭代对象
range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
创建多维列表的方法(创建一维列表,再往一维列表里的每一个元素塞一个列表进去)
A=[None]*3
for i in range(3):
A[i] = [None] * 2
或
S = [[0]*3 for i in range(3)]
is返回是否指向同一个对象(位置)的运算符,故两个相同内容的列表使用is返回内容为is
s =1
a =1
s is a(返回ture)
python的变量不是一个盒子,而是对内容进行引用,
故浅拷贝嵌套循环时(被拷贝对象改变元素,拷贝对象也会跟着改变)
原因就是因为浅拷贝的只是其引用
深拷贝 需要导入模块 import copy
y = copy.deepcopy(x)
x = [i*2 for i in x] 列表推导式(将列表x 中每一个元素的值乘2)
y = [c*2 for c in "nmd"] 输出["nn"","mm","dd"]
还可以添加一个if条件用于筛选x = [i*2 for i in x if i%2] (将列表x 中每一个元素的值如果能被2整除则乘2)
循环和列表推导式的区别是,前者逐个修改列表的值,后者创建一个新列表
在赋值为原先的变量名
ord()将单个字符串转化为对应编码
笔记3面向对象
class Hero(object):
def __init__(self, name, init_health=100, init_attack=10, alive=True):
# 构造函数/初始化方法 在创建对象时候执行
self.name = name # 为对象绑定属性
self.health = init_health
self.attack = init_attack
self.alive = True
self.birth()
def attack_enemy(self, enemy):
# 对象的方法 用本类创建的所有对象都有这个方法
enemy.health -= self.attack
if enemy.health <= 0:
enemy.alive = False
enemy.health = 0
print(f'{enemy.name} 死亡')
def upgrade(self):
self.attack *= 1.1
self.health *= 1.1
def birth(self):
print(f'我,{self.name},出生了!')
定义的里面,在属性前加两个下划线是私有属性,即只能在类里修改
在外面若要调用查看,就可以多写一个函数,如
def get_attack(self)
return self.__attack
私有属性的原理类似于改名字(不同的解释器改的不同)
Python内置类属性
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
笔记4文件读取
file = open("文件名")打开
text = file.read()读取
ptint("")
file.close()关闭文件 忘记关闭文件会造成系统资源消耗,影响后续编写内容
以只读方式打开时除了指定模式为"r"之外还有指定在python中以要打开
的文件的编码相同的方式打开,也就是让python不以默认的 gbk方式打
开,而是以我们指定的 utf-8 打开:
即
file = open(r"C:\Users\有人单推亚瑟摩根吗\Desktop\新建文本文档.txt",encoding='utf-8')
files = file.read()
print(files)
open ()打开文件的方式
r只读,指针放在开头,文件不存在则抛出异常
w只写,指针放在开头,文件存在会被覆盖,不存在创建新文件
a追加,指针放在结尾,文件存在则指针放在结尾,不存在将创建新文件写入
r+读写,指针放在开头,文件不存在则抛出异常,先读后写或先写后读,影响指针位置
w+读写,文件存在会被覆盖,不存在创建新文件
a+读写,文件存在则指针放在结尾,不存在将创建新文件写入
readline一行一行的读取(一次读取一行)
笔记5 图像
在编程的过程中发现plt.imshow()不能同时显示两张照片,
如果有两条plt.imshow()语句处于一前一后的位置,那么
程序运行后只会显示后面的图片。如果想让每一张图片都
显示出来,需要在每一个plt.imshow()语句后面加上plt.show()语句。
图片负变换
亮度变换函数在数学上定义为:
s=T(r)
其中r是导入图片的像素,s是输出图片的像素。T是一个转换函数,它将r的每个值映射到s的每个值。
负变换,即变换颠倒。在负变换中,输入图像的每个值从L-1中减去并映射到输出图像上。
在这种情况下,使用以下公式完成转换:
s=(L–1)–r
因此每个值减去255,最终效果是,图片原来较亮的部分变暗,较暗的部分变亮,这就产生了负变换。
negative = 255 - pic # neg = (L-1) - img
plt.figure(figsize = (6,6))
plt.imshow(negative);
plt.axis('off');
程序补充
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
import cv2
path = "baidu_bear.png" # 图片路径
image = Image.open(path) #读取图片
image = np.array(image)
这功能不完爆某贴某吧!