回调函数

OpenCV-Python 鼠标作画 | 八

假如想象 提交于 2019-12-06 02:44:18
目标 了解如何在OpenCV中处理鼠标事件 您将学习以下功能: cv.setMouseCallback() 简单演示 在这里,我们创建一个简单的应用程序,无论我们在哪里双击它,都可以在图像上绘制一个圆。 首先,我们创建一个鼠标回调函数,该函数在发生鼠标事件时执行。鼠标事件可以是与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等。它为我们提供了每个鼠标事件的坐标(x,y)。通过此活动和地点,我们可以做任何我们喜欢的事情。要列出所有可用的可用事件,请在Python终端中运行以下代码: import cv2 as cv events = [i for i in dir(cv) if 'EVENT' in i] print( events ) 创建鼠标回调函数具有特定的格式,该格式在所有地方都相同。它仅在功能上有所不同。因此,我们的鼠标回调函数可以做一件事,在我们双击的地方绘制一个圆圈。因此,请参见下面的代码。代码在注释中是不言自明的: import numpy as np import cv2 as cv # 鼠标回调函数 def draw_circle(event,x,y,flags,param): if event == cv.EVENT_LBUTTONDBLCLK: cv.circle(img,(x,y),100,(255,0,0),-1) # 创建一个黑色的图像,一个窗口

python 回调函数的简单使用

吃可爱长大的小学妹 提交于 2019-12-06 02:36:21
def apply_async(func, args=(), callable=None): """需要调用的回调函数的函数""" result = func(*args) # 元组拆包*args callable(result) def print_result(result): """打印日志信息""" print("Got:", result) def add(x, y): """计算函数""" return x + y class ResultHandler: """第一种 保存内部序列号""" def __init__(self): self.sequence = 0 def handler(self, result): self.sequence += 1 print('[{}] Got:{}'.format(self.sequence, result)) def make_handler(): """第二种 类的替代,可以使用闭包捕获状态值""" sequence = 0 def handler(result): nonlocal sequence # 只能用于嵌套函数中 sequence += 1 print('[{}] Got:{}'.format(sequence, result)) return handler def make_handler_2(): ""

7.jQuery之显示与隐藏效果

我的未来我决定 提交于 2019-12-06 02:15:36
这里用到三个函数方法:show() hide() toggle() 注意点是三个方法里面的两个参数的使用,前一个参数是时间,表示显示速度;后一个参数是回调函数,只有前面的动画执行完之后,回调函数才会执行 1 <style> 2 div { 3 width: 150px; 4 height: 300px; 5 background-color: pink; 6 } 7 </style> 8 <button>显示</button> 9 <button>隐藏</button> 10 <button>切换</button> 11 <div></div> 12 <script> 13 $(function () { 14 // $("button").eq(0).click(function () { 15 // $("div").show(1000,function(){ 16 // alert(1) // 注意show的用法,前面的显示速度,后面是回调函数,当动画执行完以后,再执行回调函数,从浏览器可以看到效果,下面的hide同理 17 // }) 18 // }); 19 // $("button").eq(1).click(function () { 20 // $("div").hide() 21 // }) 22 23 $("button").eq(2).click

06-01 Scrapy框架

只谈情不闲聊 提交于 2019-12-06 01:12:28
06-01 Scrapy框架 一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy 是基于twisted框架开发而来,twisted是一个流行的事件驱动的python网络框架。因此Scrapy使用了一种非阻塞(又名异步)的代码来实现并发。整体架构大致如下 The data flow in Scrapy is controlled by the execution engine, and goes like this: The Engine gets the initial Requests to crawl from the Spider . The Engine schedules the Requests in the Scheduler and asks for the next Requests to crawl. The Scheduler returns the next Requests to the Engine . The Engine

python 高性能编程之协程

拟墨画扇 提交于 2019-12-06 01:03:16
用 greenlet 协程处理异步事件 自从 PyCon 2011 协程成为热点话题以来,我一直对此有着浓厚的兴趣。为了异步,我们曾使用多线程编程。然而线程在有着 GIL 的 Python 中带来的性能瓶颈和多线程编程的高出错风险,“协程 + 多进程”的组合渐渐被认为是未来发展的方向。技术容易更新,思维转变却需要一个过渡。我之前在异步事件处理方面已经习惯了回调 + 多线程的思维方式,转换到协程还非常的不适应。这几天我非常艰难地查阅了一些资料并思考,得出了一个可能并不可靠的总结。尽管这个总结的可靠性很值得怀疑,但是我还是决定记录下来,因为我觉得既然是学习者,就不应该怕无知。如果读者发现我的看法有偏差并指出来,我将非常感激。 多线程下异步编程的方式 线程的出现,为开发者带来了除多进程之外另一种实现并发的方式。比起多进程,多线程有另一些优势,比如可以访问进程内的变量,也就是共享资源。还有的说法说线程创建比进程创建开销低,考虑到这个问题在 Windows 一类进程创建机制很蹩脚的系统才存在,故先忽略。总的来说,线程除了可以实现进程实现的“并发执行”之外,还有另一个功能,就是管理应用程序内部的“事件”。我不知道把这种事件处理分类到异步中是不是合适,但事件处理一定是基于共享进程内资源才能实现的,所以这是多线程可以做到而多进程做不到的一点。 异步处理基于两个前提。第一个前提是支持并发

JS跨域

Deadly 提交于 2019-12-06 00:15:33
同源策略(所谓同源是指:域名、协议、端口相同。) 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。 JSONP 跨域 由于 script 标签不受浏览器同源策略的影响,允许跨域引用资源。因此可以通过动态创建 script 标签,然后利用 src 属性进行跨域,这也就是 JSONP 跨域的基本原理。 JSONP方式调用 可以利用传统ajax实行实现数据请求 利用js自动生成一个回调函数.并且名称随意,发送请求时自动携带回调函数名称. url?callback="XXXXXXXX" 动态获取回调函数名称,将数据进行封装 callback(JSON) JSONP实现跨域 1.ajax请求 <script type="text/javascript"> $(function(){ alert("测试访问开始!!!!!") $.ajax({ url:"http://manage.jt.com/web/testJSONP", type:"get", //jsonp只能支持get请求 dataType:"jsonp", //dataType表示返回值类型 jsonp: "callback", //指定参数名称 /

libevent笔记3:evbuffer

廉价感情. 提交于 2019-12-05 20:44:51
evbuffer 之前提到 bufferevent 结构体提供两个缓存区用来为读写提供缓存,并自动进行IO操作。这两个缓存区是使用Libevent中的 evbuffer 实现的,同样,Libevent中也提供了相应的函数让我们能够直接操作 evbuffer 。 evbuffer的回调函数及evbuffer_cb_info结构体 我们可以为一个 evbuffer 增加回调函数,回调函数会在 evbuffer 长度有变化时被调用。 evbuffer 的回调函数列表中有一个 evbuffer_cb_info 结构体,可以用它来判断是什么事件触发了回调函数,里面包含了三个关于缓存区长度的元素: size_t orig_size: 表示长度变化前的缓存区长度; size_t n_added: 表示增加的长度; size_t n_deleted: 表示减少的长度; 读写evbuffer 除了使用 bufferevent_write 函数向缓存区读写数据外,也可以使用 evbuffer 提供的一些函数直接对缓存区进行读写操作。不过需要注意两点: 标志 EVBUFFER_FLAG_DRAINS_TO_FD 会阻止一般的读操作,只允许数据进入网络; 需要对 evbuffer 的头尾进行解冻(evbuffer_unfreeze)才能在头尾读写。不过从实验的结果来看,在调用对 evbuffer

Promise 基础

一个人想着一个人 提交于 2019-12-05 20:26:08
抽象表达:    Promise是JS中进行异步操作的新的解决方案。(之前采用纯回调方式) 具体表达:   从语法上讲:Promise是一个构造函数   从功能上讲:Promise用来封装一个异步操作,并可以获得结果 Promise的状态改变   1.pedding ==> resolved   2.pedding ==> rejected   说明:状态的改变只有这两种,而且一个promise对象只能改变一次      无论成功或者失败,都会有一个结果数据      成功的结果数据一般称作value,失败的结果称为reason Promise的基本流程 promise的基本使用 const p = new Promise((resolve, reject) => { // 执行异步操作 setTimeout(() => { const time = Date.now(); if (time % 2 === 0) { resolve("执行成功") } else { reject("执行失败") } }, 1000); }) p.then( value => { console.log("成功的回调" + value); }, reason => { console.log("失败的回调" + reason); } ) 为什么要使用Promise:   1

js数组的所有方法

五迷三道 提交于 2019-12-05 19:53:05
修改器方法 下面的这些方法会改变调用它们的对象自身的值: Array.prototype.copyWithin() 在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。 Array.prototype.fill() 将数组中指定区间的所有元素的值,都替换成某个固定的值。 Array.prototype.pop() 删除数组的最后一个元素,并返回这个元素。 Array.prototype.push() 在数组的末尾增加一个或多个元素,并返回数组的新长度。 Array.prototype.reverse() 颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。 Array.prototype.shift() 删除数组的第一个元素,并返回这个元素。 Array.prototype.sort() 对数组元素进行排序,并返回当前数组。 Array.prototype.splice() 在任意的位置给数组添加或删除任意个元素。 Array.prototype.unshift() 在数组的开头增加一个或多个元素,并返回数组的新长度。 访问方法 下面的这些方法绝对不会改变调用它们的对象的值,只会返回一个新的数组或者返回一个其它的期望值。 Array.prototype.concat() 返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。

【转载】编写简单的消息发布器和订阅器

大兔子大兔子 提交于 2019-12-05 17:44:31
目录 1.功能包的创建 2.功能包的源代码编写 3.功能包的编译配置及编译 4.功能包的启动运行 通过上一节编写 ROS 的第一个程序 hello_world ,我们对 ROS 的整个编程开发过程有了基本的了解,现在我们就来编写真正意义上的使用 ROS 进行节点间通信的程序。由于之前已经建好了 catkin_ws 这样一个工作空间,以后开发的功能包都将放在这里面,这里给新建的功能包取名为 topic_example ,在这个功能包中分别编写两个节点程序 publish_node.cpp 和 subscribe_node.cpp ,发布节点( publish_node )向话题( chatter )发布 std_msgs::String 类型的消息,订阅节点( subscribe_node )从话题( chatter )订阅 std_msgs::String 类型的消息,这里消息传递的具体内容是一句问候语“ how are you ... ”,通信网络结构如图 16 。 ( 图 16 ) 消息发布与订阅 ROS 通信网络结构图 1.功能包的创建 在 catkin_ws/src/ 目录下新建功能包 topic_example ,并在创建时显式的指明依赖 roscpp 和 std_msgs 。打开命令行终端,输入命令: cd ~/catkin_ws/src/ #创建功能包topic