华子的代码空间

逆水行舟,不进则退。 关注系统编程、网络编程、并发、分布式。

2012年12月15日

python的参数传递机制

摘要: 调用函数时,函数参数仅仅是引用传入对象的名称。参数传递的基本语义和其他编程语言中已知的方式不完全相同。例如“按值传递” 或 “按引用传递”。例如,如果传递不可变的值(如tuple、string list),参数看起来实际是按值传递的。但如果传递可变变量(如列表或字典)给函数,然后再修改次可变对象,这些改动就会反映在原始对象中。像这样悄悄修改其输入值或者程序其他部分的函数具有副作用。一般来说,最好避免使用这种编程风格,因为随着程序的规模和复杂度不断增加,这类函数会成为各种奇怪编程错误的来源。(例如,如果函数具有副作用,只看函数调用是无法明显找到问题的。)在设计线程和并发性的程序中,使用此类函数的 阅读全文

posted @ 2012-12-15 01:47 华子的代码空间 阅读(429) 评论(0) 推荐(0) 编辑

用LL(1)递归下降语法器构造一个计算器

摘要: LL(1)何为LL(1)?通俗来说就是向前看一个词法单元的自顶向下解析器。两个L都代表left-to-right,第一个L表示解析器按“从左到右”的顺序解析输入内容;第二个L表示下降解析时也是按“从左到右”的顺序遍历子节点。而(1)表示它使用一个向前看 词法单元。我们从一个简单的计算器来看看递归下降的语法器如何构造。对于 2 + 3 * 5 的抽象语法树如下:我们可以使用如下文法表示计算表达式:# expr ::= expr addop term | term# term ::= term mulop factor | factor# factor ::= number | ( expr )# 阅读全文

posted @ 2012-12-15 01:41 华子的代码空间 阅读(780) 评论(0) 推荐(0) 编辑

Python使用spark模块构造计算器

摘要: Spark简介Spark 解析器与 EBNF 语法有一些共同之处,但它将解析/处理过程分成了比传统的 EBNF 语法所允许的更小的组件。Spark 的优点在于,它对整个过程中每一步操作的控制都进行了微调,还提供了将定制代码插入到过程中的能力。Spark的最新版是10年前发布的,真是非常的长寿,可见设计精良。其中的采用的设计模式有Reflection Pattern、Visitor Pattern、Pipes and Filters Pattern和StrategyPattern。初识Spark第一次知道Spark这个模块是在IBM的网站[3]上看到的。第一次激起我学习这个模块的兴趣是在看Pyt 阅读全文

posted @ 2012-12-15 01:31 华子的代码空间 阅读(657) 评论(0) 推荐(0) 编辑

说说Python程序的执行过程

摘要: 1. Python是一门解释型语言?我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。2. 解释型语言和编译型语言计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。编译型语 阅读全文

posted @ 2012-12-15 01:27 华子的代码空间 阅读(365) 评论(0) 推荐(0) 编辑

导航