函数调用

python学习笔记10 ----网络编程

感情迁移 提交于 2020-03-07 12:47:29
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂。网络体系结构解决互质性问题彩是分层方法。 1. 网络(OSI)的7层模型: 应用层--->为应用程序提供网络通信服务 表示层--->数据表示 会话层--->主机间通信(两个应用进程间) 传输层--->端到端的连接,隔离网络的上下层协议,使得网络应用与下层协议无关 网络层--->寻找最优路径,转发数据包 数据链路层--->无差错的链路连接 物理层--->二进制传输 2. 端口   是一种抽象的软件结构,包括一些数据结构和I/O缓冲区。与协议有关。 3. 套接字存在于通信区域中。   通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。   为保证数据的正确性,在网络协议中需要制定网络字节顺序,采用统一的网络字节顺序。 网络通信三要素:   IP地址:用于表示主机(IP地址 = 网络ID+主机ID)   端口号:用于标识进程的逻辑端口   传输协议:TCP UDP 网络通信过程就是一个不断封装和解析的过程 Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定操作与驱动程序建立关系。 套接字   套接字是为特定网络协议(例如TCP/IP,ICMP/IP

学习Javascript之节流和防抖

空扰寡人 提交于 2020-03-07 11:43:16
前言 本文1012字,阅读大约需要4分钟。 总括: 本文通过实例介绍了什么是节流函数,什么是防抖函数。 公众号:「前端进阶学习」,回复「666」,获取一揽子前端技术书籍 社会犹如一条船,每个人都要有掌舵的准备。 正文 节流函数和防抖函数相信很多人都在日常业务开发中使用过,其实不管是节流函数还是防抖函数都是一种简单的高阶函数,他们都是通过将一个关键的外部变量保存在外层作用域,通过对这个变量的判断和操作来决定是否调用回调函数。 节流函数 函数节流让指函数有规律的进行调用,应用场景: 游戏中发射子弹的频率(比如1秒发射一颗); 滚动事件; 所谓节流即让回调函数在一定时间内只能调用一次,因此我们的节流函数需要的参数有两个: 回调函数; 延迟执行的时间; 实现如下: /** * @param {function} fun 调用函数 * @param {number} delay 延迟调用时间 * @param {array} args 剩余参数 */ const throttle = (fun, delay, ...args) => { let last = null; return (...rest) => { const now = + new Date(); let _args = [...args, ...rest]; if (now - last > delay) { fun

Java 8 vs. Scala(二):Stream vs. Collection

旧街凉风 提交于 2020-03-07 11:36:04
【编者按】在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比 。在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要关注 Stream 和 Collection,本文由 OneAPM 工程师编译整理。 首先,为大家做一个简短的介绍,collection 是有限的数据集,而 stream 是数据的序列集,可以是有限的或无限的。 Streams API 是 Java 8 中新发布的 API,主要用于操作 collection 和 streaming 数据。Collections API 会改变数据集状态,而 Streams API 则不会。例如,当你调用Collections.sort(list)时,该方法会对传入的参数进行排序,而调用list.stream().sorted() 则会复制一份数据进行操作,保持原数据不变。 你可以在这里获得更多关于 API 数据流的信息 以下是笔者从 Java 8 文档中摘出的 collections 和 streams 之间的比较。强烈建议大家阅读 完整版 。 Streams 和 collections 有以下几点区别: 无存储。steam 不是存储数据元素的数据结构。而是通过计算操作管道从源头传输数据元素。 2.本质是函数。对 Stream 对象操作能得到一个结果

Python装饰器

百般思念 提交于 2020-03-07 06:59:38
现有如下函数: def fun1(): print('...fun1()...') def fun2(): print('...fun2()...') #调用函数 fun1() fun2() 需求:需要给以上两个函数添加记录日志功能 方法一:函数调用 def logging(): print('...logging...') def fun1(): print('...fun1()...') logging() def fun2(): print('...fun2()...') logging() #调用函数 fun1() fun2() 分析:上面这种方式适合少量函数调用,如果有n个地方需要调用logging()函数,那么得手动调用n次,比较麻烦,而且在fun1()中调用loggin()也相当于修改了fun1()的内容。 方法二:高阶函数(函数名作为参数传递给另一个函数) def logging(fun): fun() print('...logging...') def fun1(): print('...fun1()...') def fun2(): print('...fun2()...') #调用函数 logging(fun1) logging(fun2) 分析:该方法是高阶函数的用法,将函数名当做参数传递给另一个函数,优点是没有修改源代码,缺点是该方法修改了调用的方式。

KClient——kafka消息中间件源码解读

核能气质少年 提交于 2020-03-07 06:40:13
目录 kclient消息中间件 kclient-processor top.ninwoo.kclient.app.KClientApplication top.ninwoo.kclient.app.KClientController top.ninwoo.kclient.app.handler.AnimalsHandler top.ninwoo.kclient.app.domain 总结 kclient-core top.ninwoo.kafka.kclient.boot.KClientBoot createObjectHandler createObjectsHandler createDocumentHandler createBeanHandler createBeansHandler invokeHandler 生产者和消费者创建方法 小结 top.ninwoo.kafka.kclient.boot.KafkaHandlerMeta top.ninwoo.kafka.kclient.core.KafkaProducer top.ninwoo.kafka.kclient.core.KafkaConsumer init() initAsyncThreadPool() initKafka startup() AbstractMessageTask

NET调用Com组件事例

时间秒杀一切 提交于 2020-03-07 05:09:30
http://blog.csdn.net/shizhiyingnj/article/details/1507948 在程序设计中,往往通过键盘的某个按键来完成相关操作! 下面就来说明如何实现: 1.引入名称空间; using System.Runtime.InteropServices; (由于使用到API(user32.dll) 2.使用API [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern Int32 GetKeyState(long nVirtKey); 3.测试 private void button1_Click(object sender, System.EventArgs e) { if(GetKeyState(Convert.ToInt32 (Keys.Capital))==0) { MessageBox.Show("Caps Lock为开状态!"); } } 作者:刘铁猛 日期:2005-12-20 关键字:C# .NET Win32 API 版权声明:本文章受知识产权法保护,如果阁下想转载,在转载的时候烦劳阁下连同在下的姓名一起转载,并向 bladey@tom.com 发一个Mail,我很想知道我的文章都去哪里了.谢谢. 小序 Win32

Linux设备驱动程序学习——USB 驱动程序(三)

走远了吗. 提交于 2020-03-07 04:43:01
(本部分的一些示例源码来自 drivers/usb/usb-skeleton.c ,它是Linux内核为我们提供的最基础的USB驱动程序,USB骨架程序) 驱动程序把驱动对象注册到 USB 子系统中,之后使用供应商(idVendor)和设备(idProduct)标识来判断对应的硬件是否已经安装. 驱动的设备支持列表 struct usb_device_id 结构提供了这个驱动支持的不同类型 USB 设备的列表. USB 核心通过此列表用来决定设备对应的驱动,热插拔脚本也通过此列表来决定当特定设备被插入系统时,应该自动加载的驱动. struct usb_device_id { /* 确定设备信息去和结构体中哪几个字段匹配来判断驱动的适用性 */ __u16 match_flags ; /* Used for product specific matches; range is inclusive */ __u16 idVendor ; //USB设备的制造商ID,须向 www.usb.org 申请 __u16 idProduct ; //USB设备的产品ID,有制造商自定 __u16 bcdDevice_lo ; /* USB设备的产品版本号最低值*/ __u16 bcdDevice_hi ; /* 和最高值,以BCD码来表示。*/ /* 分别定义设备的类,子类和协议,他们由 USB

回调函数

浪尽此生 提交于 2020-03-07 04:07:44
编程分为两类:系统编程(system programming)和应用编程(application programming)。所谓系统编程,简单来说,就是编写库;而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是应用。系统程序员会给自己写的库留下一些接口,即API(application programming interface,应用编程接口),以供应用程序员使用。所以在抽象层的图示里,库位于应用的底下。 当程序跑起来时,一般情况下,应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为 回调函数 (callback function)。 打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为 登记回调函数 (to register a callback function)。如下图所示(图片来源:维基百科):

JavaScript 函数

浪子不回头ぞ 提交于 2020-03-07 02:23:41
函数 由于JavaScript的函数也是一个对象,所以类似function abs(v){}函数实际上是一个函数对象,而函数名 abs 可以视为指向该函数的变量。 因此,第二种定义函数的方式如下: var abs = function (x) { if (x >= 0) { return x; } else { return -x; } }; 在这种方式下, function (x) { ... } 是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量 abs ,所以,通过变量 abs 就可以调用该函数。 此方式按照完整语法需要在函数体末尾加一个 ; 表示赋值语句结束。 由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部并不需要这些参数: abs(10, 'blablabla'); // 返回10 abs(-9, 'haha', 'hehe', null); // 返回9 传入的参数比定义的少也没有问题: abs(); // 返回NaN 此时 abs(x) 函数的参数 x 将收到 undefined ,计算结果为 NaN 。 要避免收到 undefined ,可以对参数进行检查: if (typeof x !== 'number') { throw 'Not a number'; } arguments

如何终止线程的运行(C/C++)

点点圈 提交于 2020-03-07 01:31:21
如何终止线程的运行(C/C++) 想要终止线程的运行,可以使用以下方法: 1、线程函数返回(最好使用该方法)。 2、通过调用ExitThread函数,线程将自行撤消(最好不使用该方法)。 3、同一个进程或另一个进程中的线程调用TerminateThread函数(应避免使用该方法)。 4、ExitProcess和TerminateProcess函数也可以用来终止线程的运行(应避免使用该方法)。 下面将详细介绍终止线程运行的方法:1-4,并说明线程终止运行时会出现何种情况:5。 1、线程函数返回 始终都应该将线程设计成这样的形式,即当想要线程终止运行时,它们就能够返回。这是确保所有线程资源被正确地清除的唯一办法。 如果线程能够返回,就可以确保下列事项的实现: (1)在线程函数中创建的所有C++对象均将通过它们的撤消函数正确地撤消。 (2)操作系统将正确地释放线程堆栈使用的内存。 (3)系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。 (4)系统将递减线程内核对象的使用计数。 2、ExitThread函数 可以让线程调用ExitThread函数,以便强制线程终止运行: 函数原型: VOID ExitThread(DWORD dwExitCode); 该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++资源(如C++类对象)将不被撤消