最近在写小组官网,想实现一种效果就是根据用户当前浏览情况,加载后续的文章内容,于是就在网上找相关的内容,但是发现好多都是无法实现的,终于在我的苦苦寻找之下,终于找到了解决方案,代码如下: function ScrollEvent() { var wScrollY = window.scrollY; // 当前滚动条位置 var wInnerH = window.innerHeight; // 设备窗口的高度(不会变) var bScrollH = document.body.scrollHeight; // 滚动条总高度 if (wScrollY + wInnerH >= bScrollH - 400) { //你需要做的动作 alert("test"); } } //绑定事件 window.addEventListener("scroll", ScrollEvent, false); 实现的效果就是,当滚动条离 继续阅读 >>


周攀 16/12/08 08:55:52
简单Python词法分析器简单实现: 词法分析器状态转换图: 词法分析器总流程图: 预处理程序: 词法分析器: 词法分析器程序详细设计 详细代码实现: #!/usr/bin/env python3.4 # coding=utf-8 import sys import string keywards = {} # 关键字部分 keywards['False'] = 101 keywards['class'] = 102 keywards['finally'] = 103 keywards['is'] = 104 keywards['return'] = 105 keywards['None'] = 106 keywards['continue'] = 107 keywards['for'] = 108 keywards['lambda'] = 109 keywards['try'] = 110 keywards['True'] = 111 keywards['def'] = 112 keywards[ 继续阅读 >>


周攀 16/12/06 12:36:54
文法: E->E+T | T T->T*F | F F->(E)|i 消除左递归: E->TH H->+TH|e(空,一普赛肋) T->FY Y->*FY|e F->(E)|i 非终结符集: E,H,T,Y,F 终结符集: i,+,*,(,),# 求出非终结符的FIRST集和FOLLOW集, 关于FIRST集和FOLLOW集的求法参见:http://blog.csdn.net/it_dream_er/article/details/53419667 求出的结果如下: FIRST(E)={(,i} FOLLOW = {),#} FIRST(H)={+,e} FOLLOW = {),#} FIRST(T)={(,i} FOLLOW = {+,),#} FIRST(Y)={*,e} FOLLOW = {+,),#} FIRST(F)={( 继续阅读 >>


周攀 16/12/06 12:11:36
FIRST集 怎样理解FIRST集呢?顾名思义就是一段文法所有可能的出现的开始符号的集。 求FIRST集的步骤如下: 若X->a..,则将终结符a加入FIRST(X)中; 若X->e ,则将终结符e加入FIRST(X)中(e表示空集); 若 X->BCD…E,则将First(B)所有元素(除了空集)加入 First(X),然后检测First(B),若First(B)中不存在空集, 即e,则停止,若存在则向B的后面查看,将First(C)中所有元素(除了空集)加入First(X),然后再检测First(C)中是否有e…直 到最后,若E之前的所有非终结符的First集中都含有e,则检测到E时,将First(E)也加入First(X),若First(E)中含有e,则将 e加入First(X)。 前两条都挺容易理解的,第三条解释一下:一段文法,如果前面的非终结符号不能推出空集,那么后面的非终结符号所产生的终结符号就永远不可能成为文法的首符,于是就需要特殊考虑空集的情况。 FOLLOW集 对Follow集,其实也差不多,指的是非终结符推 继续阅读 >>


周攀 16/12/01 19:39:06
操作系统的上机实验报告代码,这里分享给大家: #include<stdio.h> #include<stdlib.h> #define PROCESS_NAME_LEN 32 /*进程名称的最大长度*/ #define MIN_SLICE 10 /*最小碎片的大小*/ #define DEFAULT_MEM_SIZE 1024 /*默认内存的大小*/ #define DEFAULT_MEM_START 0 /*默认内存的起始位置*/ /* 内存分配算法 */ #define MA_FF 1 #define MA_BF 2 #define MA_WF 3 /*描述每一个空闲块的数据结构*/ struct free_block_type{ int size; int start_addr; struct free_block_type *next; }; /*指向内存中空闲块链表的首指针*/ struct free_block_type 继续阅读 >>


周攀 16/12/01 09:59:46
最近在做小组网站,需要定期到指定网页上获取一些内容,于是找到下面的一篇博文,推荐给大家。 这是我的定时器类,用来定时执行某段任务; package com.my.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; public class BugXmlTimer { public Timer timer; public void timerStart(){ timer = new Timer(); Date datetime=new Date(); Date midnightDate=new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new 继续阅读 >>


周攀 16/12/01 09:47:34
看起来,yield语句是用于定义生成器(generators),从而代替使用一个方法来返回结果,同时还能记忆已定义的局部变量。与方法不同的是,一般方法在每次调用时,都会重新定义方法中所出现的变量,而生成器则会从上次停止的地方继续往下执行。 有关Python中的Generators 因为yield关键字只用与定义生成器,首先我们先来回顾一下生成器是非常有必要的。 生成器的主意来自于一个一个的去计算一系列的结果。简单来说,一个生成器可以用于使用懒惰的(简单的)方法去计算列表里面的每一个值。下面我们可以对比一下使用一个列表和使用一个生成器去做同样的事,他们所付出的努力却是截然不同。 # python 2.x >>> # First, we define a list >>> the_list = [2**x for x in range(5)] >>> >>> # Type check: yes, it's a list >>> type(the_list) 继续阅读 >>


周攀 16/12/01 09:35:22
在Python里面,有两个非常简便的方法去构造列表,或者去用于构造整数循环,这两个方法就是xrange和range,也许你已经猜到了。 下面我们就来说说两者的不同之处。 开始之前,我们先来讨论一下xrange和range的区别。 在大多数情况下,xrange和range的功能是完全相同的,他们都提供可迭代的整数列表。唯一的区别是range返回的是list对象,而xrange返回的是xrange对象。 这是什么意思呢?这是个好问题!这意味着xrange在运行时并不像range那样生成静态的列表,它通过调用类似yield的特殊技术来创建你需要的值,这种技术与generators对象一起使用。如果你想了解更多关于generators和yield关键字,请阅读这篇文章:Python generators and the yield keyword 好了,那上面提的是什么意思呢?意思就是在当你需要生成一个巨大的列表时,比如说十亿,用xrange将是一个好的方法。尤其是当你需要在内存比较小的系统上面跑代码的时候,比如手机上面,range将会耗费大量的内存去创 继续阅读 >>


周攀 16/11/04 20:12:50
Python性能优化的一般步骤: 步骤1:找到性能 瓶颈 步骤2:优化性能 瓶颈 步骤3:goto 『步骤1』 找出瓶颈 不要相信直觉,使用专业工具 使用专业工具: profile / cprofile line_profiler ipython: %prun 使用 timeit 模块来评判性能 import timeit timeit.Timer(…).timeit() ipython: %prun 例一: def function1(): for item in range(1000000): pass 在python2中,range的实现方式是直接在内存中开辟一个静态的数组,而xrange则是通过迭代的方式动态的去生成,所以显而易见,在需要的数据量特别大的时候,range则会非常的耗费内存,所以其优化方式如下: def function2(): for item in xrange(10000 继续阅读 >>


周攀 16/11/04 10:19:41
对初学者来说,想要弄懂Python的某些错误信息还是有困难的,下面罗列了一些常见的运行时错误: 1.忘记在if, elif, else, for, while, class, def 语句末尾添加冒号(:),从而导致:“SyntaxError: invalid syntax”错误 错误发生在如下类似代码里: if spam == 42 print('Hello!') 2.使用=号,而不是==号,从而导致 “SyntaxError: invalid syntax”错误 “=”是赋值语句,而“==”号是比较两值是否相等的,这种错误常发生在如下类似代码中: if spam = 42: print('Hello!') 3.使用缩进量错误,从而导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”和“IndentationError:expected an indented blo 继续阅读 >>


周攀 16/10/25 19:02:38