我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数: def lazy_sum(*args): def sum(): ax = 0 for n in args: ax = ax + n return ax return sum f = lazy…
要注意,这里的偏函数和数学意义上的偏函数不一样,偏函数是2.5版本以后引进来的东西,属于函数式编程的一部分.前面章节中我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点.举例如下: int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换: print(')) 以上代码,输出: 但int()函数还提供额外的base参数,默认值为10.如果传入base参数,就可以做N进制的转换: print()) 以上代码,输出: '转成10进制int为…
前面我们说了,在python中,一切皆对象.函数也是一个对象,而且函数对象可以被赋值给变量,通过变量也能调用该函数.如: def sayHello(name): print(name + ' hello') fn = sayHello fn('roy') 以上代码,输出: roy hello 函数对象有一个__name__属性,可以拿到函数的名字: def sayHello(name): print(name + ' hello') f =sayHello print(f.__name__) p…
匿名函数指一类无须定义标识符的函数或子程序.Python用lambda语法定义匿名函数,只需用表达式而无需申明.lambda语法的定义如下: lambda [arg1 [,arg2, ... argN]] : expression 有些时候,当我们在传入函数时,不需要显式地定义函数,直接传入匿名函数更方便.匿名函数有个限制,就是只能有一个表达式,无需写return,返回值就是该表达式的结果.用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突.此外,匿名函数也是一个函数对象,也可以把匿名函数…
Bind函数 Bind函数在函数式编程中是如此重要,以至于函数式编程语言会为bind函数设计语法糖.另一个角度Bind函数非常难以理解,几乎很少有人能通过简单的描述说明白bind函数的由来及原理. 这篇文章试图通过"人话"来描述bind函数,并通过浅显的实例为零函数式编程语言的开发者揭秘bind函数的作用及用法. public string GetSomething(int id) { var x = GetFirstThing(id); if (x != null) { var y…
第二十一章 Django的分页与cookie 第一课 模板 1.模板的继承 在Template目录下新建模板master.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> <link rel="styl…
Python函数式编程之map() Python中map().filter().reduce()这三个都是应用于序列的内置函数. 格式: map(func, seq1[, seq2,…]) 第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合. Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回.如果func为None,作用同zip(). 1.当seq只有一个时,将函数func作用于这个seq的每个元…
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第二十一章-授予身份与切换身份(二) 1.回顾上节 在<2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(一)table.entity.service.dao >中,做了这四件事.这只是准备材料,要实现 B 假借 A 的身份进行访问,还需要完成controller部分. 1 table:sys_user_runas 2…
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第二十一章 授予身份与切换身份(一) 1.使用场景 某个领导因为某些原因不能访问一些网站,他想把这个网站上的工作委托给秘书,但是他又不想提供账户.密码.此时可以使用shiro的 RunAs 功能. RunAs:允许一个用户假装为另一个用户(如果获得了允许)的身份进行访问. 注意,本章代码基于<第十六章 综合实例>,详细的数据模型及基本流程见该章. 2.表及数据…
第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "Python.h" int fac(int n) { if (n < 2) return(1); return (n)*fac(n-1); } static PyObject * Extest…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION) 学习目标 熟悉环境光遮蔽的基本思路,以及通过光线跟踪的实现方法: 学习如何在屏幕坐标系下实现实时模拟的环境光遮蔽. 1 通过光线追踪实现的环境光遮蔽 其中一种估算点P遮蔽的方法是光线跟踪.我们随机跟踪点P半圆内的光线,然后查看和网格相交的光线.如果跟踪了N条光线,相交了h条,那么点P的遮蔽值为: 只有交点q…
本文翻译自The Flask Mega-Tutorial Part XXI: User Notifications 这是Flask Mega-Tutorial系列的第二十一章,我将添加一个私有消息功能,它将在导航栏中显示用户通知,而且无需刷新页面就可以自动更新. 在本章中,我想继续致力于改进Microblog应用程序的用户体验. 有一个广泛应用的功能是向用户显示警报或通知. 社交应用通常会通过在顶部导航栏中显示带有数字的小徽章显示这些通知来让你知道有新的提及(@)或私有消息. 虽然这是最明显的用…
第二十一章 Ajax与Comet 一.XMLHttpRequest对象 1.XHT的用法 在使用XHR对象时,要调用的第一个方法时open( ),它接受3个参数:要发送的请求的类型.请求的URL和表示是否异步发送请求的布尔值.下面是调用这个方法的例子: xhr.open( “get” , ”example.php” , false ) ; 这段代码会启动一个针对example.php的GET请求.有两点需要注意:一是URL相对于执行代码的当前页面:二是调用open( )方法并不会真正发送请求,而…
昨天晚上只顾着和女朋友看<匆匆那年>电视剧的最后几集,所以说好的Android文档<Gradle 插件用户指南>第五章自然也没翻译多少.所以今天也发不了第五章的翻译了,就发几个星期前译好的<Gradle 1.12用户指南>的第二十一章吧. 在博客上发的其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/m…
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第二十一章:同步代码块产生死锁的例子 下一章 "全栈2019"Java多线程第二十二章:饥饿线程(Starvation)详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回…
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异常第二十一章:finally不被执行的情况 下一章 "全栈2019"Java异常第二十二章:try-with-resources语句详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorh…
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第二十一章:流程控制语句中的决策语句if 下一章 "全栈2019"Java第二十二章:控制流程语句中的决策语句if-else 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&q…
第二十一章 数组 一等对象 对象数组和基元数组在使用上是完全相同的.唯一的不同之处就是对象数组存储的是对象的引用,而基元数组则直接存储基本数据类型的值. 多维数组 Array.deepToString() 方法,这将多维数组转换成 String 类型. 泛型数组 可以参数化数组本身的类型. Arrays的fill方法 Arrays 类包括一个普通的 fill() 方法,该方法将单个值复制到整个数组. Arrays的setAll方法 使用一个生成器并生成不同的值,可以选择基于数组的索引元素. 增量…
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/6821921.html Windows编程之connect函数研究 #include <iostream> using namespace std; //第四步才看 class A; class B; typedef void…
0x00 何为函数式编程 网上已经有好多详细的接受了,我认为比较重要的有: 函数是"第一等公民",即函数和其它数据类型一样处于平等地位 使用"表达式"(指一个单纯的运算过程,总是有返回值),而不是"语句"(执行操作,没有返回值) 没有"副作用",即不修改外部值 0x01 开始函数式编程 在此之前,请先了解PHP中的匿名函数和闭包,可以参考我写得博客 函数式编程有两个最基本的运算:合成和柯里化. 函数合成 函数合成,即把多个函数…
作为比较老牌的面向对象的编程语言java,在对函数式编程的支持上一直不温不火. 认为面向对象式编程就应该纯粹的面向对象,于是经常看到这样的写法:如果你想写一个方法,那么就必须把它放到一个类里面,然后new出来对象,对象调用这个方法. 这种方式在函数式编程语言看来太死板,没有必要在对待多种编程范式上采取非此即彼的做法. 如今比较现代的编程语言也都是多编程范式的支持,不再去对一种编程范式固守一隅,一种语言可能会同时具有面向对象.函数式.元编程等多种特性,这方面java的后来者C#都走在她的前面. 终…
什么是高阶函数?把函数作为参数传入或把函数做为结果值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式.函数式编程的特点: 函数本身可以赋值给变量,赋值后变量为函数: 允许将函数本身作为参数传入另一个函数: 允许返回一个函数. 在前面的章节中,我们知道可以用abs()这个函数来得到一个数的绝对值,如: print('abs(-100):', abs(-100)) 以上代码,输出: abs(-100): 100 如果,我们把代码修改下,把abs赋值给一个变量: f = abs p…
命名空间和程序集 引用其他程序集 mscorlib库 命名空间 命名空间名称命名空间的补充命名空间跨文件伸展嵌套命名空间 using 指令 using命名空间指令using别名指令程序集的结构 程序集标识符强命名程序集 创建强命名程序集 程序集的私有方式部署共享程序集和GAC 把程序集安装到GACGAC内的并肩执行 配置文件延迟签名 命名空间和程序集 引用其他程序集 在第1章中,我们在高层次上观察了编译过程.编译器接受源代码文件并生称名称为程序集的输出文件.这一章中,我们将详细阐述程序集以及它们…
这个系列涉及到了F#这门语言,也许有的人觉得这样的语言遥不可及,的确我几乎花了2-3年的时间去了解他:也许有人觉得学习这样的冷门语言没有必要,我也赞同,那么我为什么要花时间去学习呢?作为一门在Tiobe排行榜里50名开外的语言,很显然我学习他并不是为了指着F#混口饭吃,也许有一天我会为了养家糊口转向Java,但在这之前Java并没有任何吸引我学习他的地方.因为从本质上说C#和Java都是同种风格的语言,他两在语言层面的能力几乎是一样的. 如果一种编程语言不能影响你对编程的思考方式,就不值得学习…
Pipeline pipeline 管道借鉴于Unix Shell的管道操作——把若干个命令串起来,前面命令的输出成为后面命令的输入,如此完成一个流式计算.(注:管道绝对是一个伟大的发明,他的设哲学就是KISS – 让每个功能就做一件事,并把这件事做到极致,软件或程序的拼装会变得更为简单和直观.这个设计理念影响非常深远,包括今天的Web Service,云计算,以及大数据的流式计算等等) 比如,我们如下的shell命令: 1 ps auwwx | awk '{print $2}' | sort …
通过odoo框架,我们可以开发大型且复杂的应用.良好的性能是实现这一目标的基础.本章,我们将探讨如何提高应用性能.同时,我们也会讲解找出影响性能的因素. 本章包含以下内容: 记录集的预读取模式 将数据在内存中缓存 生成不同尺寸的图片 访问组数据 一次性创建或写多条数据 通过数据库查询访问数据 优化python代码 记录集的预读取模式 当我们访问数据时,内部其实是执行了SQL查询.如果我们在一个多条数据的数据集读取数据时,由于内部执行了多条SQL语句,这可能导致系统响应会比较慢.本节,我们将探讨如…
1. 概述 应用程序间传递数据,需要先将数据对象转化为字符流或字节流的形式,然后接收端收到后再转化回原始的数据对象.这就是序列化与反序列化. 本章介绍 .net中的序列化与反序列化.序列化器的种类 以及 为序列化配置对象. 2. 主要内容 2.1 序列化与反序列化 序列化只能保存对象的数据部分,不能保存方法部分.可以创建custom data transfer object(DTO)来只保存指定的数据信息. .net平台提供三种类型的序列化: ① XmlSerializer: [Serializ…
本章介绍一些sed编辑器提供的高级特性. 21.1 多行命令 按照之前的知识,所有的sed编辑器命令都是针对单行数据执行操作的. 在sed编辑器读取数据流时,它会基于换行符的位置将数据分成行,一次处理一行数据. 有时会需要对跨多行的数据执行特定操作. 比如,在数据中查找一个长的短语Linux system Administrators Group.如果这个短语出现在两行当中,之前的知识就不够用了. 解决方案,sed编辑器包含了三个可用来处理多行文本的特殊命令: N:将数据流中的下一行加进来创建一…
21.1 引言 可靠性的保证之一就是超时重传 前面两个超时重传的例子 1)  ICMP端口不能到达时,TFTP客户使用UDP实现了一个简单的超时和重传机制,假定5s是一个适当是时间间隔,并每隔5s进行重传 2)  在向一个不存在的主机发送ARP的 例子中,可看到当TCP试图建立连接的时候,在每个重传之间使用一个较长的时延来重传SYN 对于每个连接,TCP管理4个不同的定时器: 1)  重传定时器使用于当希望收到另一端的确认 2)  坚持(persist)定时器使窗口大小信息保持不断流动,即使另一…
问题来自 Scala 函数式编程 一书的习题, 让我很困扰, 感觉函数式编程有点神学的感觉.后面看懂之后, 又觉得函数式编程所提供的高阶抽象是多么的强大. 这个问题让我发呆了好久, 现在把自己形成的想法分享下, 如果能少让一个人为这个问题烦恼, 那就再好不过了:) 问题: 如何通过函数 foldRight 实现 左折叠(left fold)操作 ? 这里只是讨论理论上的可行性, 实际中都是通过函数 foldLeft 实现右折叠操作, 因为函数 foldLeft 是栈安全的(不会因为压栈太深导致栈…