首页 文章 精选 留言 我的

精选列表

搜索[python3],共1105篇文章
优秀的个人博客,低调大师

Python3源码—内建对象

1.1. Python内的对象 Python中的类和实例都是通过Python内的对象来实现的。Python中已经预先定义了一些类型对象。这些内建类型对象通过实例化,可以创建内建类型对象的实例对象。 在Python中,对象就是为C中的结构体在堆上申请的一块内存,一般来说,对象是不能被静态初始化的,并且也不能在栈空间上生存。唯一的例外就是类型对象,Python中所有的内建的类型对象都是被静态初始化的。 在Python中,一个对象一旦被创建,它在内存中的大小就是不变的了。这就意味着那些需要容纳可变长度数据的对象只能在对象内维护一个指向一块可变大小的内存区域的指针。 1.2. PyObject PyObject是整个Python对象机制的核心,定义如下: // object.h typedef struct _object { _PyObje

优秀的个人博客,低调大师

Python3源码—Dict对象

7.1. 散列表 散列表的基本思想,是通过一定的函数将需搜索的键值映射为一个整数,将这个整数视为索引值去访问某片连续的内存区域。理论上,在最优情况下,散列表能提供O(1)复杂度的搜索效率。 用于映射的函数称为散列函数(hash function),而映射后的值称为元素的散列值(hash value)。在散列表的实现中,所选择的散列函数的优劣将直接决定所实现的散列表的搜索效率的高低。 在使用散列表的过程中,不同的对象经过散列函数的作用,可能被映射为相同的散列值。而且随着需要存储的数据的增多,这样的冲突就会发生得越来越频繁。散列冲突是散列技术与生俱来的问题。 装载率是散列表中已使用空间和总空间的比值。如果散列表一共可以容纳10个元素,而当前已经装入了6个元素,那么装载率就是6/10。研究表明,当散列表的装载率大于2/3时,散列冲突发生的概率就

优秀的个人博客,低调大师

Python3源码—整数对象

3.1. 整数对象 整数对象是“变长对象”。 3.1.1. Python中的创建 Python中整数对象最重要的创建方法为PyLong_FromLong,如下Python语句最终会调用到PyLong_FromLong: a = 1 b = int(1) 3.1.2. PyLong_FromLong的C调用栈 词法解析,最终调到PyLong_FromLong,调用顺序如下: // ast.c ast_for_expr =>ast_for_power =>ast_for_atom_expr =>ast_for_atom (case NUMBER) =>parsenumber =>parsenumber_raw // longobject.c => PyLong_FromLong 3.1.3. PyLong_Fro

优秀的个人博客,低调大师

Python3源码—浮点对象

2.1. 浮点对象 浮点对象是“定长对象”。 2.1.1. Python中的创建 Python中浮点对象创建最重要的方法为PyFloat_FromDouble,如下Python语句最终会调用到PyFloat_FromDouble: a = 1.23 b = float(1.234) 2.1.2. PyFloat_FromDouble的C调用栈 词法解析,最终调到PyFloat_FromDouble,调用顺序如下: // ast.c ast_for_expr =>ast_for_power =>ast_for_atom_expr =>ast_for_atom (case NUMBER) =>parsenumber =>parsenumber_raw // floatobject.c => PyFloat_Fr

优秀的个人博客,低调大师

Python3源码—List对象

6.1. List对象 List对象是“变长对象”。 6.1.1. Python中的创建 Python中List对象最重要的创建方法为PyList_New,如下Python语句最终会调用到PyList_New: test = [1, 2, 3, 4, 5] 6.1.2. PyList_New的C调用栈 // pystate.c PyInterpreterState_New // ceval.c =>_PyEval_EvalFrameDefault (case BUILD_LIST) // listobject.c => PyList_New 6.1.3. PyList_New源码 // listobject.c PyObject * PyList_New(Py_ssize_t size) { PyListObject *o

优秀的个人博客,低调大师

Python3入门机器学习 - numpy篇

numpy是python的一个支持矩阵、向量运算的库,由于python自带的list不仅效率低,也不会将数组看作矩阵或者向量,因此在机器学习中,使用numpy来作为操作数组及矩阵的工具 numpy生成数组或矩阵 numpy.array([i for i in range(10)]) numpy.dtype numpy.zeros(10,dtype=int //该参数可选) numpy.zeros((3,5)) numpy.ones(shape=(3,5)) numpy.full(shape=(3,5),fill_value=66.0) numpy.arange(10) numpy.arange(0,1,0.2) arange函数生成步长相等的数列 numpy.linspace(0,20,10) linspace函数生成个数一定的数列 随机数 numpy.random.randomint(0,10) 生成[0,10)这个区间的一个随机整数 numpy.random.randomint(0,10,size=10) 十个随机整数 numpy.random.randonint(0,10,(4,5)) 4*5矩阵的随机整数 numpy.random.seed(123) 设置伪随机数种子,在每次random调用前使用相同的种子可得到相同的随机数序列 numpy.random.normal() 生成均值为0,方差为1的分布的随机浮点数 numpy.random.noraml(5,10,(3,5)) 均值为5,方差为10的3*5矩阵 矩阵属性 x=numpy.arange(10,(3,5)) x.ndim //x的维度 x.shape //x的各维度长度 x.size //x的总元素数量 使用X=x[:2,:2]获取的x的子矩阵,当修改X时同样会改变x的值,修改x也会改变X的值 因此我们如果我们想获得一个和x无关的x的子矩阵,需要使用X=x[:2,:2].copy() 使用y=x.reshape(5,3)可以将3*5的x矩阵改变为5*3的y矩阵,x的值不变 y=x.reshape(5,-1)可以自动帮我们计算出,要将x转换为5行,所需要的列数y依然变为5*3的矩阵 数据合并分割 numpy.concatenate([A,B],axis=1) numpy.vstack(A,B) numpy.hstack(A,B) numpy.split(A,[2],axis=1) numpy.vsplit(A,[2]) numpy.hsplit(A,[2]) 矩阵运算 矩阵间所有直接使用运算符的运算都只会进行相应元素间的运算 例如 因此如果我们想要进行正常的矩阵运算,需要调用numpy支持的函数,例如乘法 A.dot(B) numpy.linalg.inv(A) 求A矩阵的逆 numpy.linalg.pinv(A) 求A矩阵的伪逆矩阵 聚合运算 np.sum(A) np.sum(A,axis=0) 沿着维度为0的轴进行求和运算 np.prod(A) 对A矩阵求所有元素乘积 np.mean(A) 求均值 np.median(A) 求中位数 np.percentile(A,50) 求第五十个百分位点的数值 np.var(A) 求方差 np.std(A) 求标准差 索引与排序 np.argmin(A) 求A中最小值的索引值 np.argmax(A) np.random.shuffle(x) 对x进行乱序处理 np.argsort(x) 索引排序 np.partition(x,3) 以3为基准线排序 np.argpartition(x,3) Fancy Indexing numpy支持将数组作为索引来查询array里的值 查询的数组甚至可以是布尔数组 num.array的比较 该比较方法可以推广到所有比较符以及矩阵 np.any(判断条件) 只要变量中有一个元素满足判断条件,返回True np.all(判断条件) 只有所有变量元素满足判断条件,返回Ture np.sum(X%2==0,axis=1) 该命令查看矩阵X沿列方向有多少偶数 np.sum((x<3) & (x>7)) 计算x中大于3,小于7的元素个数,在该运算中,只使用了一个&符号,也就是说,这里并非条件运算&&,而是位运算&(与运算)

优秀的个人博客,低调大师

Python3 批量修改JPG图片尺寸

功能 批量修改当前文件夹下的jpg图片到设置的尺寸 将修改后的图片移动到 new_img 这个文件夹下 导入库 from PIL import Image # 处理图片模块 import os import shutil # 移动文件模块 如果没有请提前安装相应的库. 定义一个函数用来处理图片尺寸 def smaller_img(x, y, path): # x,y用来传入尺寸,path用来传入路径 old_img = Image.open(path) img_deal = old_img.resize((x, y), Image.ANTIALIAS) # 转换图片 img_deal = img_deal.convert('RGB') # 保存为jpg格式才需要 img_deal.save('新的文件名') 遍历当前文件夹下的文件路径 now_path = os.getcwd() new_path = os.mkdir(now_path + '\\' + 'new_img') # 创建一个名为new_img的文件夹 for file_name in os.listdir(now_path): files_path = now_path + '\\' + file_name print(files_path) # 输出当前目录下所有的文件的绝对路径 将修改后的图片移动到创建的新文件夹 我使用笨办法,用字符串判断的方式,来确定是否是修改后的图片文件.shutil 模块参考链接 for move_name in os.listdir(now_path): move_path = now_path + '\\' + move_name if 'switch' in move_path: shutil.move(move_path,new_dir) # shutil.move(文件/目录 , 目录) else: print(move_path, '无须移动') 把这些功能整合起来 from PIL import Image import os import shutil x = input('请输入需要修改的尺寸,长:') x = int(x) y = input('请输入需要修改的尺寸,高:') y = int(y) now_path = os.getcwd() new_path = os.mkdir(now_path + '\\' + 'new_img') new_dir = now_path + '\\' + 'new_img' # 修改图片大小 def smaller_img(x, y, path): path = str(path) old_img = Image.open(path) img_deal = old_img.resize((x, y), Image.ANTIALIAS) img_deal = img_deal.convert('RGB') img_deal.save('switch_' + file_name) # 遍历文件夹下的文件,并判断是否是JPG文件 for file_name in os.listdir(now_path): files_path = now_path + '\\' + file_name if 'jpg' in files_path: smaller_img(x, y, files_path) # 遍历文件来判断是否是转换后的jpg文件 for move_name in os.listdir(now_path): move_path = now_path + '\\' + move_name if 'switch' in move_path: shutil.move(move_path,new_dir) else: print(move_path, '无须移动') print(file_name, 'switch success') else: print(file_name, 'is not img') 结束语 有错误的地方请指出,请大家多多批评

优秀的个人博客,低调大师

Python3入门(十一)OS文件/目录方法

os模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示 方法 描述 os.access(path, mode) 检验权限模式 os.chdir(path) 改变当前工作目录 os.chflags(path, flags) 设置路径的标记为数字标记。 os.chmod(path, mode) 更改权限 os.chown(path, uid, gid) 更改文件所有者 os.chroot(path) 改变当前进程的根目录 os.close(fd) 关闭文件描述符 fd os.closerange(fd_low, fd_high) 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略 os.dup(fd) os.dup(fd) os.dup2(fd, fd2) 将一个文件描述符 fd 复制到另一个 fd2 os.fchdir(f

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册