Python 与尾递归优化
什么是尾递归 有很多时候,使用递归的方式写代码要比迭代更直观一些,以下面的阶乘为例: def factorial(n): if n == 0: return 1 return factorial(n - 1) * n 但是这个函数调用,如果展开,会变成如下的形式: factorial(4) factorial(3) * 4 »
什么是尾递归 有很多时候,使用递归的方式写代码要比迭代更直观一些,以下面的阶乘为例: def factorial(n): if n == 0: return 1 return factorial(n - 1) * n 但是这个函数调用,如果展开,会变成如下的形式: factorial(4) factorial(3) * 4 »
去年微软最令开源狗界振奋的消息就是 ASP.NET 的开放与开源这一消息了。 根据微软的介绍,与我之前的一些总结,可以看到 ASP.NET 以及 .NET 平台会有下面几个变化: 代码使用 Apache 协议开源,并且托管于 Github 上。 新的 C# 编译器 Roslyn。 一个新的跨平台的 CLR(对应 Java »
JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题。以往在浏览器中,因为与服务器通讯是一种比较昂贵的操作,因此比较复杂的业务逻辑往往都放在服务器端,前端 JavaScript 只需要少数几次 AJAX 请求就可拿到全部数据。 但是到了 webapp 风行的时代,前端业务逻辑越来越复杂,往往几个 AJAX 请求之间互有依赖,有些请求依赖前面请求的数据,有些请求需要并行进行。还有在类似 node.js 的后端 JavaScript 环境中,因为需要进行大量 »
在Python中我们可以直接使用dir函数获取一个对象的内部数据(推荐使用inspect.getmembers,输出内容更为详细),但是想知道这个对象在内存级别上的结构时此方法就无能为力了。 常用的一个Python实现Cpython中,一个对象的实现(PyObject)其实是一个结构体。那要探索结构体的方法就很多了,比如重新编译解释器,在其中输出log,或者直接使用gdb。 还有另外一个方案,就是使用内置的ctypes。ctypes可以将任意一段数据转换为C的结构体,处理PyObject当然也没问题啦。 PyObject的定义在object.h当中,在2.7版本,并且没有定义Py_TRACE_REFS的情况下,将宏展开后是这个样子: typedef »
这年头wsgi server满天飞,主流都是多进程+异步的形式,纯C实现的也不少。 libevent是C语言的一个异步网络框架,有内置对http的支持,刚好拿来练手,于是就造了个轮子,C语言实现的wsgi server。源码在这里。 依赖libevent2和python2.7,在Ubuntu下只要 > sudo apt-get install python2.7-dev > sudo apt-get install libevent-dev »