解析函数

对Python新手编程过程中如何规避一些常见问题的建议

心不动则不痛 提交于 2020-02-07 17:42:17
这篇文章收集了我在Python新手开发者写的代码中所见到的不规范但偶尔又很微妙的问题。本文的目的是为了帮助那些新手开发者渡过写出丑陋的Python代码的阶段。为了照顾目标读者,本文做了一些简化(例如:在讨论迭代器的时候忽略了生成器和强大的迭代工具itertools)。 对于那些新手开发者,总有一些使用反模式的理由,我已经尝试在可能的地方给出了这些理由。但通常这些反模式会造成代码缺乏可读性、更容易出bug且不符合Python的代码风格。如果你想要寻找更多的相关介绍资料,我极力推荐The Python Tutorial或Dive into Python。 迭代 range的使用 Python编程新手喜欢使用range来实现简单的迭代,在迭代器的长度范围内来获取迭代器中的每一个元素: for i in range(len(alist)): print alist[i] 应该牢记:range并不是为了实现序列简单的迭代。相比那些用数字定义的for循环,虽然用range实现的for循环显得很自然,但是用在序列的迭代上却容易出bug,而且不如直接构造迭代器看上去清晰: for item in alist: print item range的滥用容易造成意外的大小差一(off-by-one)错误,这通常是由于编程新手忘记了range生成的对象包括range的第一个参数而不包括第二个

使用 Python 在 Linux 上实现一键回归测试

时间秒杀一切 提交于 2020-02-07 11:30:34
从代码库迁出代码 —- pexpect 的使用 测试人员从代码库(例如 CVS )迁出代码的过程中,需要手动输入访问密码,而 Python 提供了 Pexpect 模块则能够将手动输入密码这一过程自动化。当然 Pexpect 也可以用来和 ssh、ftp、passwd、telnet 等命令行进行自动化交互。这里我们以 CVS 为例展示如何利用 Pexpect 从代码库迁出代码。 清单 1. 用 pexpect 迁出代码库代码 try : chkout_cmd = 'cvs co project_code' #从代码库迁出 project_code 的内容 child = pexpect . spawn ( chkout_cmd ) child . expect ( 'password:' ) child . sendline ( 'your-password' ) #请替换"your-password"为真实密码 child . interact ( ) except : pass #忽略迁出代码中的错误 在清单 1 中,我们用命令”cvs co project_code”从代码库中迁出了 project_code 的内容,我们也可以用该命令来更新已经迁出的代码。只需要将命令”cvs update” 传给类 pexpect.spawn()即可,详细的实现请参考代码文件。这里

vue数据双向绑定的原理

给你一囗甜甜゛ 提交于 2020-02-06 13:09:13
一、vue的实现原理 Vue.js采用ES5提供的属性特性功能,结合发布-订阅模式,通过Object.defineOrototype()为各个定义set、get特性方法,在数据发生变化时给订阅者发布消息,触发相应的监听回调。 具体步骤如下: 对需要观察的数据对象进行递归遍历,包括子属性对象的属性,设置set和get特性方法。当给这个对象的某个值赋值时,会触发绑定的set特性方法,于是就能监听到数据变化。 用complie解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将各个指令对应的节点绑定更新函数,添加监听数据的订阅者。一旦数据有变动,就会收到通知,并更新视图。 Watcher订阅者是Observer发布者和complie解析模板指令之间通信的桥梁,主要功能如下: 在自身实例化时像属性订阅器(Dep)里面添加自己; 自身必须有一个update()方法; 在dep.notice()发布通知时,能调用自身的update()方法,并触发complie中绑定的回调函数。 MVVM是数据绑定的入口,整合了Watcher、Observer、Complie三者,通过Observer来监听自己的model数据变化,通过Complie来解析模板指令,最终利用Watcher搭起Observer和Complie之间的通信桥梁,达到数据变化通知视图更新的的效果。利用视图交互

iOS开发之block解析

故事扮演 提交于 2020-02-05 22:04:57
1. block的本质是一个Objective-C的对象,为什么这么说? 在Objective-C中,runtime会在执行时依据对象的isa指针的指向,来度额定这个对象的类型,也能够觉得一个对象,它具有isa指针,就是一个OC对象 2. 你怎么知道block有isa指针呢,我们能够通过clang命令将来看block的实现 //測试代码 int main(int argc, const char * argv[]) { @autoreleasepool { void(^blk)(void)=^{ NSLog(@"hello lx"); }; } return 0; } 转化后:block语法被编译器转化成了以下的结构 struct __main_block_impl_0 { struct __block_impl impl;//block实现的相关信息 struct __main_block_desc_0* Desc;//block的描写叙述信息 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int flags=0) { impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; } };

预解析

爱⌒轻易说出口 提交于 2020-02-05 09:03:25
一、 预解析(在对应的作用域内执行) * 函数或者变量都会有一个提解析的过程,js会把函数或者变量提前解析一下,解析到它们对应的作用域最开始的僧 * 步骤 * 首先是在全局域下进行, * 1、先找var 、function关键字以及参数 * 2、如果找到了var(声明的变量,参数),会给他赋一个undefined。如果找到了function,那它会把整个函数都拿过来 * 如果没有找到var那么就相当于结束了 * 3、把找到的东西,放到 对应的作用域 的最开始的位置 * 4、逐行执行代码 * 如果到了函数域(一个新的域里面),又会在函数域重新进行1.2.3.4 //var a=undefined; /*var b=undefined; function fn(){ console.log(b); //undefined var b=20; }*/ console .log(a); //undefined var a = 10 ; console .log(a); //10 var b = 12 ; function fn (){ //var b=undefined;因为在函数域里面又重新开始找var并且找到了赋了一个undefined. console .log(b); //undefined var b = 20 ; } fn(); var b = 12 ; function fn

PHP基础语法

我怕爱的太早我们不能终老 提交于 2020-02-03 00:49:04
一、变量 1.1 变量名称 PHP中的变量是由一个“$”后面跟变量名来表示,变量名是区分大小写的。 一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母、数字,或者下划线。 1.2 给变量赋值 1.3 引用赋值 将“&”符号加到将要赋值变量前 1.4 变量的数据类型 $a=1 //$a是整形 $a=1.1 //$a是浮点型 $a="a" //$a现在是字符串型,PHP解析器会自动决定变量的类型 1.5 可变变量 <?php $a='hello'; $$a='world'; echo $a; //输出hello echo $$a; //输出world echo $hello; //输出world ?> 二、常量 2.1 声明常量 可以用define()声明常量 define('NAME','php'); //常量名是一个大写的字符串 echo NAME; //输出php 也可以用const关键字定义常量 const NAME='php'; echo NAME; //输出php 2.2 常量与变量的不同 #常量前没有“💲”符号; #常量只能用define()函数和const关键字定义,不能通过赋值语句; #常量一经定义就不能被重新定义或者取消定义 #常量的值只能是标量 2.3 用defined()函数检测常量是否存在 2.4 内置常量

Hive之常用函数解析

别来无恙 提交于 2020-02-02 19:07:59
一、空字段赋值 1、NVL(给值为 NULL 的数据赋值) 格式是 NVL( string1, replace_with)。它的功能是如果string1 为 NULL,则 NVL 函数返回 replace_with 的值,否则返回 string1 的值,如果两个参数都为 NULL ,则返回 NULL。 举例:如果员工的 comm 为 NULL,则用-1 代替 select nvl(comm,-1) from emp; 二、时间类 1、date_format(格式化时间 ) select date_format('2020-02-02 10:45:00','yyyy-MM-dd'); 2、date_add(时间跟天数相加 ) select date_add('2020-02-02',5); select date_add('2020-02-02 10:20:00',5); select date_add('2020-02-02',-5); 3、date_sub(时间跟天数相减) select date_sub('2020-02-02 10:20:00',5); select date_sub('2020-02-02',-5); 4、datediff(两个时间相减) select datediff('2020-02-02','2020-02-01'); select datediff(

JS之reduce函数解析

…衆ロ難τιáo~ 提交于 2020-02-02 14:30:25
语法: arr.reduce(callback,[initialValue]) reduce() 方法接收一个函数作为累加器 ,reduce 为数组中的每一个元素依次执行回调函数 参数说明: (1)callback是调用方法; (2)initialValue是callback初次调用时的第一个参数值。 callback函数中包含四个参数:如下 arr.reduce(function(prev,cur,index,arr){ },init) arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。 示例: (1) 求数组项的和 由于传入了初始值0,所以prev的值是0,cur的值为为数组的第一项1,相加之后的和1为下一轮的回调的prev'的值,然后再继续与下一个数组项相加,直到完成所有数组项的和并返回。 (2)求数组项的最大值 (3)数组去重 原理: (1) 初始化一个空数组作为初始值; (2) 将数组中的第一项在初始化的数组中查找,如果初始数组里没有此项,那么就将此项添加到初始数组, (3) 将需要去重处理的数组中的第2项在 初始化数组 中查找,如果找不到,就将该项继续添加到 初始化数组 中 (4

这些面试题你会怎么答?

对着背影说爱祢 提交于 2020-02-01 02:42:21
前言 最近参加了几场面试,积累了一些高频面试题,我把面试题分为两类,一种是基础试题: 主要考察前端技基础是否扎实,是否能够将前端知识体系串联。一种是开放式问题: 考察业务积累,是否有自己的思考,思考问题的方式,这类问题没有标准答案。 基础题 题目的答案提供了一个思考的方向,答案不一定正确全面,有错误的地方欢迎大家请在评论中指出,共同进步。 怎么去设计一个组件封装 组件封装的目的是为了重用,提高开发效率和代码质量 低耦合,单一职责,可复用性,可维护性 前端组件化设计思路 js 异步加载的方式 渲染引擎遇到 script 标签会停下来,等到执行完脚本,继续向下渲染 defer 是“渲染完再执行”,async 是“下载完就执行”,defer 如果有多个脚本,会按照在页面中出现的顺序加载,多个async 脚本不能保证加载顺序 加载 es6模块的时候设置 type=module,异步加载不会造成阻塞浏览器,页面渲染完再执行,可以同时加上async属性,异步执行脚本(利用顶层的this等于undefined这个语法点,可以侦测当前代码是否在 ES6 模块之中) css 动画和 js 动画的差异 代码复杂度,js 动画代码相对复杂一些 动画运行时,对动画的控制程度上,js 能够让动画,暂停,取消,终止,css动画不能添加事件 动画性能看,js 动画多了一个js 解析的过程,性能不如 css

MFC单文档程序架构解析

六眼飞鱼酱① 提交于 2020-01-31 02:02:11
MFC单文档程序架构解析 MFC单文档程序架构解析 这里我以科院杨老师的单文档程序来分析一下MFC单文档的程序架构,纯属个人见解,不当之处烦请指教! 首先我们了解到的是 图(一) theApp 是唯一一个在程序形成的时候就存在的全局变量,它属于CstockAppApp类,而CstockAppApp 继承于CwinApp类,我们看一下MSDN中CwinApp的继承关系如下: 图(二) 从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心。 首先分析一下的是CsockAppApp这个类,这里面有一个重要的函数 BOOL CStockAppApp::InitInstance()这个函数,包含了单文档程序中重要的信息,特别要提到的是一下的一段代码: CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CStockAppDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame windon RUNTIME_CLASS(CStockAppView)); 这里体现了几个重要的思想,第一动态创建和动态附加的一种思想,RUNTIME_CLASS是一个宏定义,这里不做展开