Comments

首先来一句装X的话:

less is more

1. How

less 是一个很方便的命令行工具,但不足的是不能语法高亮,查看的都是黑白的纯文本。幸运的是,source-highlight 可以弥补这一点。在 Ubuntu 安装 source-highlight 非常方便:

sudo apt-get install source-highlight

安装完成后需要做一些简单的配置。编辑 .bashrc,加上以下配置项:

# less hightlight
export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=" -R "

要注意的是 /usr/share/source-highlight/src-hilite-lesspipe.shsrc-hilite-lesspipe.sh 脚本的路径,不同的系统可能不一样,可以查找一下(find / -name src-hilite-lesspipe.sh)。

使配置生效:

source ~/.bashrc

这样就可以在之后使用 less filename 查看文件内容时,支持语法高亮。

Read on →
Comments

Note

前段时间在 stack overflow 上看到一个关于 python decorator(装饰器)的问题,有一个人很耐心的写了一篇很长的教程。我也很耐心的看完了,获益匪浅。现在尝试翻译过来,尽量追求准确和尊重原文。不明白的地方,或翻译不好的地方,请参照原文,地址:

Understanding Python decorators


1. python的函数是对象(Python’s functions are objects)

要理解装饰器,就必须先知道,在python里,函数也是对象(functions are objects)。明白这一点非常重要,让我们通过一个例子来看看为什么。

def shout(word="yes"):
    return word.capitalize()+"!"
 
print shout()
# outputs : 'Yes!'
 
# 作为一个对象,你可以像其他对象一样把函数赋值给其他变量
 
scream = shout
 
# 注意我们没有用括号:我们不是在调用函数,
# 而是把函数'shout'的值绑定到'scream'这个变量上
# 这也意味着你可以通过'scream'这个变量来调用'shout'函数
 
print scream()
# outputs : 'Yes!'
 
# 不仅如此,这也还意味着你可以把原来的名字'shout'删掉,
# 而这个函数仍然可以通过'scream'来访问
del shout
try:
    print shout()
except NameError, e:
    print e
    #outputs: "name 'shout' is not defined"
 
print scream()
outputs: 'Yes!'

OK,先记住这点,我们马上会用到。python 函数的另一个有趣的特性是,它们可以在另一个函数体内定义。

def talk():
 
    # 你可以在 'talk' 里动态的(on the fly)定义一个函数...
    def whisper(word="yes"):
        return word.lower()+"..."
 
    # ... 然后马上调用它!
 
    print whisper()
 
# 每当调用'talk',都会定义一次'whisper',然后'whisper'在'talk'里被调用
talk()
# outputs:
# "yes..."
 
# 但是"whisper" 在 "talk"外并不存在:
 
try:
    print whisper()
except NameError, e:
    print e
    #outputs : "name 'whisper' is not defined"*
Read on →
Comments

久违的图书馆~~虽然刚开学,图书馆里已经有不少同学在看书自习了,学校的氛围就是不一样,在安静的环境和熟悉的书香中,很容易就静下心来。OK,下面进入正题。

openpyxl 是一个用来处理 excel 文件的 python 代码库。Python 有一些内置的功能相似的代码库,不过我都没用过,而且好像都有不少局限性。openpyxl 用起来还是挺简单的,对照文档就可以解决一些基本需求,比如常见的都写操作。不过有一个前提,它只能用来处理 Excel 2007 及以上版本的 excel 文件,也就是 .xlsx/.xlsm 格式的表格文件。顺便提一下,xlsxlsx 是两种完全不同的格式,其本质的差别相比字面的区别要多很多。xls 的核心结构是复合文档类型的结构,而 xlsx 的核心结构是 XML 类型的结构,采用的是基于XML的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。

Read on →
Comments

python 的 list, string, tuple 都提供了切片操作,用起来非常方便。有时候会需要对字典进行截取,只需要其中一部分数据。然而 python 的 dict 没有提供类似的切片操作,所以就得要自己实现。

其实也很简单:先取出所有 keys,再对 keys 切片,然后用得到的键去字典里找值重新创建一个新的字典。示例代码:

def dict_slice(adict, start, end):
    keys = adict.keys()
    dict_slice = {}
    for k in keys[start:end]:
        dict_slice[k] = adict[k]
    return dict_slice
Read on →
Comments

在写Python的时候经常会遇到时间格式的问题,每次都是上 Google 搜索然后找别人的博客或网站来参考。现在自己简单总结一下,方便以后查询。

首先就是最近用到的时间戳(timestamp)和时间字符串之间的转换。所谓时间戳,就是从 1970 年 1 月 1 日 00:00:00 到现在的秒数。那关于为什么是1970年这个特殊的日期,这篇文章有个简单明了的介绍:

为什么计算机时间要从1970年1月1日开始算起?

Read on →
getElementsByTagName('BODY')[0]).appendChild(s); }()); getElementsByTagName('BODY')[0]).appendChild(s); }()); getElementsByTagName('BODY')[0]).appendChild(s); }());