node-thunkify 的实现及源码阅读

最近看了些项目的源码,其中就包括 thunkify。虽然 thunkify 代码简单,很快就读完了,不过看看项目的测试文件和提交历史,也还是能看出很多事物的。这次阅读的代码是当前最新版本,commit 编号 0bd83e

功能陈述

将一个函数转换为一个为 Thunk 函数,这个函数被调用后会返回一个以回调函数为参数的函数。可以参考 Thunk 函数

杭州白马湖漫展一行

作为一名在杭州读书的学生,其实从大一开始,我就一直想去这个展会了。第一次和第二次“太乖”,遇上了点学院的事,听了辅导员和学生会的建议,给他们做苦力去了。第三次正忙于升学考试,故自愿放弃了那次机会。但今年,我在杭州,又没有理由不去,所以还是去了。之所以选择这个日子(4月28日),主要还是因为听说“山下智博”也会来展,想去见见,所以选择了今天。

ACG

一周面试小结

背景及摘要

3 月 15 日,浙大玉泉校区举办了一场招聘会,近几百家单位参加。虽然我不是浙大本校生,但是外校学生若携带学生证件也是可以进入的。我总共带了 12 份简历前往,并全部投出。我的目标岗位为 Web 前端开发,但也对 Python / Node.js 后端有意向。目前我已进行了 3 次面试,分别是 数聚科技, 谷神星, 企朋 (点击可查看拉钩网上的信息)。我想在这篇文章里分享一下我这几次的面试过程,谈谈我的一些想法,希望对大家有帮助。

Python 对函数默认参数的处理

Python 对函数默认参数的处理

一个以可变对象为默认参数的函数:

1
2
3
4
5
6
7
8
9
10
11
class A:
def __init__(self):
self.x = 1
print('created')

def f(a = A()):
a.x += 1
print(a.x)
# output: created
f() # output: 2
f() # output: 3

从结果可以看出,Python 在解析时便已经创建好了默认参数 a 的值。函数 f 在调用时采用了同一个对象,而不是每次调用时重新创建新的对象。这一点与 C++ 的处理方式不同。

初看 CPython

什么是 CPython

简单的说, CPython 是 Python 解释器的一个实现。换句话说,Python 解释器是由 C 写的,然后由 GCC 之类的编译器编译而成的可执行文件。除了 CPython,还有 PyPy(用 Python 实现的 Python 解释器),Skulpt(用 JavaScript 实现的 Python 解释器) 等等。如果你不知道你用的是哪一个,那么你一定用的就是 CPython。因为 CPython 是 Python 官方的解释器实现,其它均属于第三方实现。

从源码到运行

对于从 Python 源码到解释器执行它们的这个过程,我把它分为两大步 —— 编译(Compiling) 与 解释(Interpreting)。

延迟计算: 关于 Python 的 yield

在 SICP 第 3 章中,有一段部分内容是以 stream 为核心而展开的。而 stream 的特点就是 lazy evaluation / delayed evaluation (惰性求值 / 延迟计算)。在接触 stream 之时,我便立即联想到 Python 具有类似的功能 — yield

对 SICP Chapter 2 的一些理解

SICP 第二章的标题为 “Building Abstractions with Data”。与第一章标题“Building Abstractions with Procedures” 相比,这一章明显注重于在数据上的抽象。因此,在本章中所采用的例子中,会有多种数据类型被抽象出来,而每种数据类型又会对应着多种操作,那么随着代码量的增多,如何在不减少需求的情况下正确的对数据的抽象将直接影响开发者编码时的难度以及后期维护的成本。

在阅读和练习完 Chapter 2 之后,我想谈一下对我思维冲击比较大的几个点。