解析函数

装饰器浅解析(带参数的函数)2

匿名 (未验证) 提交于 2019-12-03 00:36:02
如果我们的函数带有参数如何来装饰: def person (age) : print( "xl is %s years old!" % (age)) # 我们定义一个函数person # 调用函数person person( 18 ) # 执行结果: xl is 18 years old! # 如果: person(- 10 ) # 执行结果: xl is - 10 years old! # 没有哪个人的年龄是是负数 # 写一个装饰器如果你给的年龄是负数的话,就默认为0,0总比负数好 def outer (func) : def inner (age) : if age < 0 : age = 0 func(age) return inner say = outer(say) say(- 10 ) # 执行结果 xl is 0 years old! 把装饰器函数和person函数调换一下位置: def outer (func) : def inner (age) : if age < 0 : age = 0 func(age) return inner # # 在python2.4 支持使用@符号 # 使用@符号将装饰器应用到函数 @outer def person (age) : print( "xl is %s years old!" % (age)) #

EventBus 源码解析

∥☆過路亽.° 提交于 2019-12-03 00:34:48
1. 功能介绍 1.1 EventBus EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。 传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。 1.2 概念 事件(Event): 又可称为消息,本文中统一用事件表示。其实就是一个对象,可以是网络请求返回的字符串,也可以是某个开关状态等等。 事件类型(EventType) 指事件所属的 Class。 事件分为一般事件和 Sticky 事件,相对于一般事件,Sticky 事件不同之处在于,当事件发布后,再有订阅者开始订阅该类型事件,依然能收到该类型事件最近一个 Sticky 事件。 订阅者(Subscriber): 订阅某种事件类型的对象。当有发布者发布这类事件后,EventBus 会执行订阅者的 onEvent 函数,这个函数叫 事件响应函数 。订阅者通过 register 接口订阅某个事件类型,unregister 接口退订。订阅者存在优先级,优先级高的订阅者可以取消事件继续向优先级低的订阅者分发

Dagger 源码解析

∥☆過路亽.° 提交于 2019-12-03 00:34:11
1. 功能介绍 1.1 Dagger Dagger 是一款 Java 平台的依赖注入库,关于依赖注入,详细见 依赖注入简介 。 Java 的依赖注入库中,最有名的应该属 Google 的 Guice,Spring 也很有名,不过是专注于 J2EE 开发。Guice 的功能非常强大,但它是通过在运行时读取注解来实现依赖注入的,依赖的生成和注入需要依靠 Java 的反射机制,这对于对性能非常敏感的 Android 来说是一个硬伤。基于此,Dagger 应运而生。 Dagger 同样使用注解来实现依赖注入,但它利用 APT(Annotation Process Tool) 在编译时生成辅助类,这些类继承特定父类或实现特定接口,程序在运行时 Dagger 加载这些辅助类,调用相应接口完成依赖生成和注入。Dagger 对于程序的性能影响非常小,因此更加适用于 Android 应用的开发。 1.2 依赖注入相关概念 依赖(Dependency): 如果在 Class A 中,有个属性是 Class B 的实例,则称 Class B 是 Class A 的依赖,本文中我们将 Class A 称为宿主(Host),并且全文用 Host 表示;Class B 称为依赖(Dependency),并且全文用 Dependency 表示。一个 Host 可能是另外一个类的 Dependency。 宿主

C++虚函数表解析

匿名 (未验证) 提交于 2019-12-03 00:34:01
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样

caffe softmax_loss layer 解析

匿名 (未验证) 提交于 2019-12-03 00:32:02
按理说每一层应该都要求一层梯度,其中包括对权值,对输入数据,对偏置分别求取梯度。但是在softmax with loss layer这一层求取梯度的一些过程被省去了,首先这一次只是一个激活函数层,没有权值和偏置参数,然后我们只需要对输入数据求取梯度,softmax with loss layer的输入数据其实表示的是原始输入数据相对于各个标签的打分,而对于代价函数对这个输入的梯度已经有专门的迭代算法来求解。 一.softmax简介 当某个类的预测值很大时该类的分量流趋向于1,其他类的分量值就变得很小。 二.前向传播 在caffe中的softmax layer中它的前向传播过程如下所示 输入的向量经过指数化和归一化后进行输出,这就是softmax layer的前向计算过程,主要代码为 template <typename Dtype> void SoftmaxLayer<Dtype>::Forward_cpu(const vector<Blob<Dtype> >& bottom,const vector<Blob<Dtype> >& top) { const Dtype* bottom_data = bottom[0]->cpu_data(); Dtype* top_data = top[0]->mutable_cpu_data(); Dtype* scale_data =

libco协程库原理解析与应用

匿名 (未验证) 提交于 2019-12-03 00:26:01
最近在准备一个libco协程库原理简析与应用的分享,顺便就整理下写个博客,一方面加深下自己对协程库的理解,另一方面也希望能对想了解协程的学者有所帮助。废话不多说了,言归正传吧。 想去剖析libco协程库的实现原理,首先我们要了解下什么是协程。维基百科上给协程的定义是协程(coroutine)又称微线程,是一个无优先级的子程序(函数)调度组件,允许子程序在特定的地方挂起和恢复。我们可通过一个例子来理解下这句话的意思。函数调用大家都很熟悉吧,下面的这个是一个函数调用的例子。 我们可以很容易的看出函数执行的结果是1 2 3 x y z。而协程的定义说是函数调度组件,但不同的是允许子程序在特定的地方挂起和恢复。也就是调用A函数时可以执行到一半然后挂起去执行B函数,之后可以从A函数挂起的地方继续执行,例如下面的例子: 这个程序执行的结果是1 2 x 3 y z。从这个例子中我们可以对协程的定义有个很清晰的认识了。 了解了协程的定义,那么我们为什么需要协程呢,协程有什么的作用呢,接下来我们来看下协程的由来 起初人们喜欢同步编程,然后发现有一堆线程因为I/O卡在那里,并发上不去,资源严重浪费。 网络服务器模型一般为while(1){accept(); read(); do(); send()}。 然后出了异步(select,epoll,kqueue,etc),将I/O操作交给内核线程

以太坊源码解析 - 交易源码分析

匿名 (未验证) 提交于 2019-12-03 00:22:01
以太坊交易基本流程: 完整流程分为以下几个步骤: 发起交易:指定目标地址和交易金额,以及需要的gas/gaslimit 交易签名:使用账户私钥对交易进行签名 提交交易:把交易加入到交易缓冲池txpool中(会先对交易签名进行验证) 广播交易:通知EVM执行,同时把交易信息广播给其他结点 用户通过JSON RPC发起 eth_sendTransaction 请求,最终会调用 PublicTransactionPoolAPI 的 SendTransaction 实现, 首先根据from地址查找到对应的wallet,检查一下参数值, * 通过SendTxArgs.toTransaction()创建交易 * 通过Wallet.SignTx()对交易进行签名 * 通过submitTransaction()提交交易 //代码位于 `internal/ethapi/api.go` func (s *PrivateAccountAPI) SendTransaction(ctx context.Context, args SendTxArgs, passwd string ) (common.Hash, error) { if args.Nonce == nil { // Hold the addresse's mutex around signing to prevent concurrent

C语言指针相关解析

匿名 (未验证) 提交于 2019-12-03 00:19:01
在C语言中除了一级指针和二级指针,还有一些比较常用但又比较拗口的指针类型。 比如:指针数组和数组指针。它们的名称只是前后顺序不一样,却有着千差万别,容我向大家徐徐道来。 先看两种定义:int *p[5], int(*p)[5]。 第一个是指针数组,由于"[ ]"的优先级高于“*”,所以p先和"[ ]"结合,构成了数组,后和"*"结合,成了指针数组。 指针数组依然是数组,只不过它里面存放的是指针。如图: 第二个是数组指针,在加了“()”后,p先与“*”结合,因此成为了数组指针。顾名思义,它是一个指针,指向p[4]数组 的首地址。 继续如图!: 函数指针:例如void(*fun1)( );函数指针是用来存放函数地址的变量,在函数中,函数的地址是入口地址,由函数名来表示。 函数指针比较好理解,因此不会赘言太多。 在函数指针的基础上,介绍一个定义: 函数指针数组,它是一个数组,用来存放一组函数的地址。 函数指针数组的一个简单应用:计算器 int (* p )[ 5 ]( int x , int y )={ 0 , add , sub , mul , div }; 其中int(*p)[5]()就是一个函数指针数组,这样调用函数时,特别方便,效率也高。 在函数指针数组的概念下,最后介绍一个顺口溜一般的类型: 函数指针数组的指针。它是一个指针,指向一个数组,数组里面存放函数的地址。 依次拆开

损失深度学习网络基础解析(一)

匿名 (未验证) 提交于 2019-12-03 00:19:01
神经网络是深度学习的基石,说起来的渊源应该是1986年 Rumelhart 和 McCelland 提出的BP(Back Propagation)算法。一般书上要讲解这一部分知识通常会从模型结构、算法原理等等开始,这样虽然会很专业严谨,然而对初学者不甚友好,不利于快速消化吸收。而本系列文章则以初学者的角度来边思考,边“形容”出深度学习深层次的原理,并在此基础上配以公式和图片,以满足处于不同学习阶段的学习者理解深度学习。 在开始讲深度学习理论之前,我们先来回想一个小时候都玩过的游戏(首先声明一下我是90后,00后作为电子时代的孩子有没有玩过我就不知道了)――猜数字,也就是两个人坐在一起,其中一个人A在心里默想一个数字x,然后让另一个人B猜,当B说出一个数字后,A只能回答真实数字比猜测值大、小或是相等,然后B再根据A的回答相应调整猜测值,直到两者相等为止。 我们放慢这一过程(就像下图一样)――当B说出一个数字后,猜测值 x g x g 随着数据流到了A,随之A在心里面将真实值 x r x r 和猜测值 x g x g 做了比较,即 Δ = x r x g Δ = x r x g ,然后将 Δ Δ 的正负情况告诉 B,B 则提出一个新的值 x g + Δ g x g + Δ g ( Δ g Δ g 是一个与 Δ Δ 正负一致,然而绝对值不尽相同的数) 给A进行判断。

变量和变量类型的解析

匿名 (未验证) 提交于 2019-12-02 23:59:01
在运行程序过程中,可能会发生变化的量,叫做变量。 注意:Python典型的弱数据类型语言,变量的类型是不用声明的,而是由值来确定的 但是在python中,直接定义a = 6 即可,不用输入int。 虽然特别方便,但是python有自己的命名规则,变量又叫带有名称的内存 变量(标识符)的命名规则: 我们可以通过导入模块查找关键字 如果想知道,自己输出的变量是什么函数,则需要用到type函数 这里学到一个快捷方式,你可以直接在文件夹储存路径处输入cmd,可以直接跳到所需要文件夹 注意:print函数中%s是占位符,默认会将第一个%后面的值复制到占位符 来源:博客园 作者: 也有理想 链接:https://www.cnblogs.com/wananluni/p/11484062.html