
python
文章平均质量分 67
哦...
这个作者很懒,什么都没留下…
展开
-
WSGI协议
原文地址是在原文基础上有删节。那第一步就是研究一下究竟什么是WSGI.转载 2022-11-11 15:46:10 · 295 阅读 · 0 评论 -
funtools.wraps
在login_require中对内部函数加上装饰器@functools.wraps(func),这样就能保证被装饰的函数依然保留自己的函数名称。这样/xxx对应的视图函数名称是xxx,而/yyy对应的视图函数名称是yyy,就不存在重名问题了。原因大家都知道,@装饰器是一种语法糖的格式。其实这在很多场合使用是没有问题的,但是在某些特别需要独一无二函数名称的场景就会出现问题了,比如Flask的视图函数。这样写就意味着/xxx和/yyy的视图函数对应的视图函数均为wrapper,违反了一一对应的原则。原创 2022-10-19 11:04:08 · 257 阅读 · 0 评论 -
梯度的方向与等高线切线方向垂直
这里一直隐含了一个东西,梯度也是向量(由z函数在某具体点对各个变量求偏导组成)它也是有方向的,当L射线与此时梯度方向一致时,方向导数达到最大值,也就是梯度的模。换句话说,在某个具体点上,梯度方向永远是函数上升最陡峭的方向,但是梯度的方向该如何计算呢?当单位向量的方向与梯度向量方向一致时(也就是单位向量与梯度向量的夹角θ为0°角时),z函数在某点L方向的方向导数达到最大值,最大值就是梯度的值(模)。方向导数是函数z在某个具体点上(例如(x0,y0,z0...))沿通过该点的射线L方向计算得到的导数。转载 2022-10-07 01:20:27 · 1757 阅读 · 0 评论 -
一文看懂Img2Col卷积加速算法
本文转自。转载 2022-09-14 00:11:12 · 1716 阅读 · 1 评论 -
Flask的__name__的作用
以上内容粘贴自2.2.2版本Flask源码的说明部分(有部分删改)原创 2022-09-06 10:18:42 · 376 阅读 · 0 评论 -
关于flask中static_folder 和 static_url_path参数理解
Flask 在创建app的时候是用来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下。我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)我们可以看到 static_folder 是默认为 static。我们之所以能够访问到 static下面的静态文件,是因为注册了路由,就和flask的 app.route一样我们现在查看下 注册路由的方法。......转载 2022-08-05 12:43:15 · 2528 阅读 · 0 评论 -
协程与任务
只不过一个是以单线程异步方式执行任务(期物对象的执行另当别论),一个是多线程执行任务,最后执行的结果都以序列作为容器,以任务添加顺序作为下标,有序呈现。用async def定义的函数称为协程函数,“调用”协程函数时获得的是一个协程对象(coroutine object)。期物最典型的应用场景是通过asyncio提供的run_in_executor函数,该函数将一个非异步阻塞函数通过扔到线程池中执行,同时将该函数包装为一个Future(期物)对象返回。但是Task对象的执行也得用await的方式执行。...原创 2022-08-04 11:08:45 · 468 阅读 · 0 评论 -
模拟input输入并获得print输出的内容
需求源自要进行一次Python考试的判题。题目的答案使用print输出的,我希望获得输出的内容然后与标准答案进行比对,进而做出是否得分的判定。我的思路是利用io操作,修改用户提交的py源文件,加入一些我的自定义内容,形成一个新的py源文件。例如,这是用户提交的原始文件题目本身并不难,就是凯撒密码,但是作为判卷程序需要模拟input输入和获得学生程序print输出的结果。所以我首先写了一个辅助判卷程序mytest.py然后再写一个程序用来将mytest.py与学生提交的原始程序有机结合一下。结合的原创 2022-06-14 12:00:34 · 507 阅读 · 0 评论 -
python的io模块
open函数是一个工厂函数。根据传入的变量,open函数会进行文件的开启、文件对象的创建与设定,然后返回文件对象。我们来看一下指定不同变量时,open函数具体为我们返回了什么类型的文件对象呢:>>> open('Documents/me.txt')<_io.TextIOWrapper name='Documents/me.txt' mode='r' encoding='cp936'>>>> open('Documents/me.txt','rb')原创 2021-11-04 11:56:20 · 2845 阅读 · 0 评论 -
Python文件读写 w+ 与 r+ 到底如何操作
原文地址:Python中文件读写之 w+ 与 r+ 到底有啥区别?本文在原文基础上有删改。r 是只读,只能读不能写,这是很明确的:f = open("test.txt", 'r', encoding="utf-8") f.write("we are heros\n")data = f.read()print(data, type(data))f.close()这样的话报错是明显的:io.UnsupportedOperation: not writable但是变成r+呢转载 2021-11-03 23:27:43 · 3171 阅读 · 0 评论 -
它们真的是Python内置函数吗?
这种图皆取自python.org,列出了python3.10中的内置函数。但是,这些真的都是函数吗?我们来测试一下:import typesimport inspectlst = dir(__builtins__)for name in lst: print(name, eval(f'type({name})'))lst获得的都是__builtins__模块中内容的名称,也就是说lst是一个由字符串组成的列表。但是每个字符串所代表的内容可各有含义。比如"sum"...原创 2021-10-20 13:28:47 · 375 阅读 · 0 评论 -
关于yield的二三事
一切从一张图片开始:如何用turtle画这张图?我相信,即使你画不出来,也能说出来:用递归!OK!递归确实可以实现,但是官方给出的代码是:from turtle import Turtle, mainloopfrom time import perf_counter as clockdef tree(plist, l, a, f): if l > 3: lst = [] for p in plist: p.fo.原创 2021-10-14 11:39:03 · 240 阅读 · 0 评论 -
Python异步IO操作
异步 IO 是一种并发编程设计,Python3.4 开始,已经有专门的标准库 asyncio 来支持异步 IO 操作。你可能会说,我知道并发用多线程,并行用多进程,这里面的知识已经够我掌握的了,异步 IO 又是个什么鬼?本文将会回答该问题,从而使你更加牢固地掌握 Python 的异步 IO 操作方法。几个名词先解释下:异步:异步是什么意思?这不是一个严格的定义,从下面两个方面来理解:异步程序可以在等待其最终结果的同时“暂停”并让其他程序同时运行。 通过上述机制,异步代码有助于并发执行。换句话说,异转载 2021-10-10 21:41:24 · 759 阅读 · 0 评论 -
方向导数与梯度
文章转载于:终于理解了方向导数与梯度1.方向导数方向导数的本质是一个数值,简单来说其定义为:一个函数沿指定方向的变化率。因此,构建方向导数需要有两个元素:1) 函数2) 指定方向当然,与普通函数的导数类似,方向导数也不是百分之百存在的,需要函数满足在某点处可微,才能计算出该函数在该点的方向导数。至于其物理含义,这里采用最常用的下山图来表示。简单将上图看作是一座山的模型。我们处在山上的某一点处,需要走到山下。理论上来说,这座山的表面是可以通过一个...转载 2021-09-27 22:13:44 · 3191 阅读 · 0 评论 -
图解最大熵原理(The Maximum Entropy Principle)
这个“熵“并不是指热力学上熵的概念,而是由信息论男神克劳德·艾尔伍德·香农(Claude Elwood Shannon)在1948年提出的“信息熵“,用来描述信息的不确定程度。信息熵公式:H = − ∑ p ( x ) l o g p ( x ) , H = - \sum p(x) logp(x),H=−∑p(x)logp(x),这个听起来很神奇的概念,其实蕴含着最朴素最简洁的思想,看下去你就能体会这一点了。先来问个问题,如果给你一颗骰子,你觉得分别掷到1,2,…,6的概率是多少?我觉得.转载 2021-08-30 16:48:49 · 2222 阅读 · 0 评论 -
paddleGAN环境搭建
1下载anaconda2创建虚拟环境(3.7或3.8均可)3conda启动虚拟环境,在虚拟环境中安装所需库4安装paddlepaddle(目前版本是2.1,安装paddlepaddle时会安装适合paddlepaddle的numpy 1.19和其它相关内容)5安装paddlehub(安装paddlehub时,会安适合paddlehub版本的opencv相关内容)6安装paddleGan(paddleGan需要去Github上下载完整项目后,进行解压)7根据解压后padd...原创 2021-08-24 04:16:35 · 1649 阅读 · 1 评论 -
解决PyQt5 QMediaPlayer播放mp3后占用的问题
先看使用PyQt5的QMediaPlayer播放MP3文件的代码片段:def play_media(self,filename): abs_path = os.path.abspath(filename) url = qtc.QUrl.fromLocalFile(abs_path) c = QMediaContent(url) self.media_player.setMedia(c) self.media_player.play()代码的说明:方法出自原创 2021-07-07 13:39:20 · 1583 阅读 · 2 评论 -
卷积神经网络的卷积核大小如何确定
上左图:假设卷积核(又叫filter,neuron)是3*3,第一层卷积核的中心pixel,可以“看到”(receptive field)输入图3*3的区域(这里把它理解成“连通性”),第二层卷积核作用在第一层之上,这个卷积核的中心pixel可以“看到”原图的区域扩大成5*5。结论:几个小的卷积核(例如3*3)叠加(stack)在一起,相比一个大的卷积核(例如7*7),与原图的连通性不变,但是却大大降低了参数的个数以及计算复杂度!但卷积核的数量是任意的,卷积核的数量决定了卷积后的特征图数量。原创 2021-07-06 01:54:57 · 4043 阅读 · 1 评论 -
霍夫变换检测直线(HoughLines)
霍夫变换用来检测任意能够用数学公式表达的形状,即使这个形状被破坏或者有点扭曲。霍夫变换的原理是将特定图形上的点变换到一组参数空间上,根据参数空间点的累计结果找到一个极大值对应的解,那么这个解就对应着要寻找的几何形状的参数(比如说直线,那么就会得到直线的斜率k与常熟b,圆就会得到圆心与半径等等)。关于霍夫变换核心以及难点就是关于就是有原始空间到参数空间的变换上。以直线检测为例,假设有一条直线L,原点到该直线的垂直距离为ρ,垂线与x轴夹角为θ ,那么这条直线是唯一的,且直线的方程为 ρ=xcosθ+ysin原创 2021-06-29 00:25:04 · 9395 阅读 · 4 评论 -
图像的上采样与下采样
上采样:别名:放大图像,也叫图像插值。目的:放大原图,从而可以显示在更高分辨率的显示设备上。缺点:会对图像的质量造成影响,并没有带来更多的信息。方法:内插值。插值方法有很多,比如均值,中值,最近邻。通过这种方法,在周围像素色彩的基础上用数学公式计算丢失像素的色彩。 反卷积。即通过转置卷积核的方法来实现卷积的逆过程。 反池化。在池化过程,比如max-pooling时,要记录下每个元素对应kernel中的坐标。反池化时即将每一个元素根据坐标填写,其余位置补0。下采样:别名:缩小图像原创 2021-06-27 23:58:11 · 6993 阅读 · 1 评论 -
PyQt5的事件机制
基于widget的应用程序都是由事件event驱动的,像鼠标单击、按下某个按键、重回组件、最小化窗口等都会产生相应的事件。应用程序的事件循环原创 2021-06-10 20:10:51 · 1222 阅读 · 0 评论 -
梯度与方向导数
假设我们有一个函数 y = f(x),其中 x 和 y 是实数。这个函数的 导数(derivative)记为 f′(x) 或 dydx。导数 f′(x) 代表 f(x) 在点 x 处的斜率。换句话说,它表明如何缩放输入的小变化才能在输出获得相应的变化:f(x + ϵ) ≈ f(x) + ϵf′(x)。因此导数对于最小化一个函数很有用,因为它告诉我们如何更改 x 来略微地改善 y。例如,我们知道对于足够小的 ϵ 来说,f(x − ϵsign(f′(x))) 是比 f(x) 小的。因此原创 2021-06-07 16:49:56 · 999 阅读 · 0 评论 -
梯度下降是个啥?
本文主要解决三个问题:1. 梯度到底是啥?2. 梯度下降有啥用?3. 为啥要下降?转载 2021-06-03 15:45:42 · 261 阅读 · 0 评论 -
深度学习中number of training epochs中的,epoch到底指什么?
首先复习下神经网络的概念。神经网络由一些相互链接的“神经元”组成。每个“神经元”有相应的权重。神经网络的神奇之处就在于权重是通过训练自动得出的。所谓训练,就是让神经网络在训练数据集上跑一遍,看看损失函数的值怎么样。如果损失函数的值足够小,小到符合我们的需求,那就说明神经网络拟合得很好了,训练大功告成了(实际上并非如此,因为仅仅知道拟合得很好并不够,我们还要知道神经网络是不是拟合得太好了,也就是过拟合。所以还需要用测试数据集来测试是否过拟合。不过这里就姑且就当训练完成了把。)反之,如果损失函数的.转载 2021-06-02 11:56:54 · 3825 阅读 · 3 评论 -
获取tkinter的keysym
from tkinter import *def call_back(event): print(event.keysym)def main(): root = Tk() frame = Frame(root,width=200, height=200,background='green') frame.bind("<KeyPress>", call_back) frame.pack() frame.focus_set() mai.原创 2021-05-25 21:10:48 · 497 阅读 · 0 评论 -
register_shape
海龟默认的画笔形状(shape)包括箭头、三角、方形、圆形和海龟,通过设置resizemode和shapesize,可以改变它们的大小。import turtlepen = turtle.Turtle()pen.shape('turtle')pen.shapesize(5, 5, 1)turtle.done()通过turtle的register_shape指令,可以新增更多的画笔shape。register_shape支持三种添加方式:1.添加指定的图片作为画笔的shape原创 2021-05-25 17:30:37 · 3812 阅读 · 0 评论 -
onscreenclick和onclick
onscreenclick隶属于turtle模块。所以函数调用只能是turtle.onscreenclick()。onscreenclick是一个监听器的角色,用来监听当鼠标在画布上按下事件,一旦事件发生,就会调用以函数参数形式传入的处理函数。onscreenclick调用处理函数时,会给处理函数传入发生鼠标点击的坐标位置。import turtledef show(x,y): print(x,y)turtle.listen()turtle.onscreenclick(show原创 2021-05-25 17:01:20 · 2801 阅读 · 0 评论 -
编码默认值
节选自《流畅的python》4.5节处理文本文件如果打开文件时没有指定encoding参数,默认值由locale.getpreferredencoding()提供。 如果系统设定了PYTHONIOENCODING环境变量,sys.stdout/stdin/stderr的编码使用设定的值。否则继承自所在的控制台。 如果输入/输出重定向到文件,则编码默认值由locale.getpreferredencoding()定义。 Python在二进制数据和字符串数据之间转换时,默认使用sys.getdefau原创 2021-04-17 15:31:08 · 330 阅读 · 0 评论 -
Unicode标准以及其常见的编码方案
本文转载自:原文地址Unicode标准为每一个字符提供一个唯一的数字,而不用区分平台、语言等因素。The Unicode Standard provides a unique number for every character, no matter what platform, device, application or language.基本概念在开始学习之前,我们需要先了解本文所涉及到的一些基本概念。抽象字符(Abstract character):用于组织、控制或者表示文本转载 2021-04-17 02:25:15 · 1730 阅读 · 0 评论 -
一文读懂Python可迭代对象、迭代器和生成器
原文地址:一文读懂Python可迭代对象、迭代器和生成器我们都知道,序列可以迭代。但是,你知道为什么吗? 本文来探讨一下迭代背后的原理。序列可以迭代的原因:iter 函数。解释器需要迭代对象 x 时,会自动调用 iter(x)。内置的 iter 函数有以下作用:(1) 检查对象是否实现了iter方法,如果实现了就调用它,获取一个迭代器。(2) 如果没有实现iter方法,但是实现了getitem方法,而且其参数是从零开始的索引,Python 会创建一个迭代器,尝试按顺序(从索引 ...转载 2021-04-02 10:56:02 · 149 阅读 · 0 评论 -
pyqt5designer添加QVideoWidget控件
使用QMediaPlayer播放视频文件的时候需要指定播放时的视频输出控件,位于PyQt5.QtMultimediaWidgets下的QVideoWidget就是视频输出控件之一。但是QVideoWidget并不是设计师控件之一,换言之,在pyqt5designer中是找不到这个控件的。QVideoWidget是双继承了QWidget和QMediaBindableInterface,所以一个QVideoWidget可以视为一个QWidget控件。因此在设计师中可以先添加一个QWidget控件。然原创 2021-01-22 00:36:11 · 7988 阅读 · 5 评论 -
使用pop3和imap接收邮件并解析
使用python内置的smtplib可以利用smtp协议来发送邮件,本文是使用pop3和imap两种方式来接收邮件,并对邮件内容进行解析。利用IMAP协议接收邮件需要用到的库均为Python内置库:import imapclientimport emailimport email.parserimport email.policyimport base64imapclient用来从邮件服务器下载邮件,email,email.parser和email.policy用来解析邮件内容,b原创 2021-01-04 12:54:54 · 2784 阅读 · 0 评论 -
PyQt5删除QListWidget中的item
app = qtw.QApplication(sys.argv)win = qtw.QMainWindow()def build(): ui = d1.Ui_Form() ui.setupUi(win) ui.pbtn_add.clicked.connect(add_item) ui.pbtn_remove.clicked.connect(remove_item)def add_item(): lst = win.findChild(QListWidg...原创 2020-12-01 02:50:50 · 5896 阅读 · 0 评论 -
协程与线程和线程池
一句话,协程是基于单线程的,协程的根是事件总线(eventloop)。所以,想在多线程环境下跑协程任务,就必须在运行任务的线程中手动安排上事件总线才可以!典型的场景就是loop.run_in_executor(线程池,任务,任务参数)import asynciofrom concurrent.futures import ThreadPoolExecutordef run(corofn, *args): # 协程任务可以跑起来的根是线程中有事件总线! # 获取事件总线.原创 2020-09-21 10:07:24 · 1312 阅读 · 0 评论 -
打包带资源文件的Python项目到pypi
之前上传到pypi作为库的只是一个单独.py文件,而且py文件中无须引入任何多余的第三方依赖,即使在项目文件夹下没有源文件package也无所谓,只要在setup.py文件中使用py_modules说明要添加的py文件即可。这一次制作的是包含资资源文件的项目,项目结构如下:kitchen是项目文件夹,cookgame是源文件夹,cookgame下面的sound是声音资源文件夹,包括一个mp3和一个wav声音文件,textures是图片资源文件夹,包括若干png和jpg的图片。game.py需要使原创 2020-09-16 18:11:35 · 2276 阅读 · 2 评论 -
conda创建虚拟环境
1cmd下输入conda env list或者conda info -e检查目前已有的conda虚拟环境。conda env list 如果之前没有增加过conda的虚拟环境,则只会有一个默认的,由conda自带的名为base的虚拟环境。2输入指令 conda create -n虚拟环境的名字 python =版本号conda create -n myenv python=3.7.4示例指令是安装一个名为myenv的虚拟环境,虚拟环境使用的python版本是3.7....原创 2020-08-21 01:15:55 · 4494 阅读 · 4 评论 -
使用PyQT5 designer的相关问题
1.安装如果即没有安装过PyQt5也没有安装过其它相关设置工具,则直接安装pyqt5-toolspip install pyqt5-tools -i https://pypi.douban.com/simple此时会先安装pyqt5-tools,然后再自动安装pyqt5。pyqt5-tools比较大,安装时最好指定国内镜像。2.启动进入cmd,直接输入pyqt5designer进行designer的启动。启动时,有可能会报VCRUNTIME140_1.DLL文件缺失,此时.原创 2020-08-10 16:18:15 · 303 阅读 · 0 评论 -
Numpy按轴计算
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])如果二维数组a展示到图上就是:因为a[0]为[1,2,3,4],a[1]为[5,6,7,8],a[2]为[9,10,11,12],所以[1,2,3,4]在0轴0的位置,[5,6,7,8]在0轴1的位置,而[9,10,11,12]在0轴2的位置。1是a[0][0],2是a[0][1],3是a[0][2],4是a[0][3],所以[1,2,3,4]按照自己的下标顺序沿着1轴依次展开。5,6,7,8和.原创 2020-05-27 00:57:55 · 1479 阅读 · 0 评论 -
Numpy transpose函数的可视化理解
转自知乎观海云远的文章,做了部分的删改。3维数组的小例子:import numpy as npt = np.arange(1,17).reshape(2, 2, 4)print(t)三维数组为:[[[ 1 2 3 4] [ 5 6 7 8]] [[ 9 10 11 12] [13 14 15 16]]]使用转置函数:t1 = t.transpose(1, 0, 2)print(t1)转置结果为:[[[ 1 2 3 4] [ 9转载 2020-05-26 21:17:51 · 378 阅读 · 1 评论 -
Numpy的切片索引
通过索引得到的是原数组降低维度的内容,通过切片得到的是原数组维度的部分内容。arr2d = np.array([[1,2,3],[4,5,6]]) 这是一个Numpy的二维数组利用索引,获得arr2d中的内容:arr2d[0]是[1,2,3],是一个一维数组,比arr2d二维数组降低了一个维度arr2d[1]是[4,5,6],是一个一维数组,比arr2d二维数组降低了一个维度arr2d[0,1],获得2。可以将其看为两步,首先是arr2d[0]获得降低一个维度的一维数组[1,2,3],然原创 2020-05-24 13:28:59 · 764 阅读 · 0 评论