Python的排序操作

标签:Python

昨晚写聊天室时,遇到一个排序的问题,所以便稍作研究,记录了下来。

先看sorted(iterable[, cmp[, key[, reverse]]])这个内建函数,它会返回iterable排序后的列表。看上去参数很多,所以慢慢研究。

用Python写的限制长度的队列

标签:Python

由于某些应用经常要限制列表的长度,所以就自己写了个类。
其实直接继承list更方便,不过我还是用包含来实现了,正好巩固一下内置操作。
私有成员我也没写2个下划线,需要的自己替换下就行了。
后面那一大段代码是单元测试,引入模块时可以删去。

Python的metaclass

标签:Python

metaclass一般译作元类,它是一个类的类(型)。简单来说,元类的实例是一个类,而这个类的类就是元类了。
也就是说,相对于类可以在运行时动态构造对象而言,元类也可以在运行时动态生成类。

在C++等语言中,要得知一个对象的类是很麻烦的(MFC是用宏来实现的);而Python由于有自省功能,所以非常简单。

在Python中实现Decorator模式

标签:Python

Decorator模式一般被翻译成装饰模式,它主要是用于扩展已有的功能。
一般而言,扩展只需要继承即可。但因为继承是静态的,无法动态扩展,于是会有很大的局限性。

考虑一下Java的java.io.Reader类,它有很多子类,它们之间的组合如果都用继承来实现的话,我想会是超枯燥的。
所以当我们需要一个缓冲的文件读取器,我们不会去创建一个FileBufferedReader对象,而是像下面这样创建:
Reader reader = new BufferedReader(new FileReader(filename))
这样的好处就是,我们可以随意地动态组合这些功能,而不是为每种组合都创建一个类。

在静态语言里,要实现Decorator模式是很麻烦的,因为你可能需要定义3个类。
不过在Python这种动态语言里,你完全不需要定义类,因为函数本身就是可以扩展的。

Python 3.1 alpha 2发布

标签:Python

详细更新内容请看What's New in Python 3.1 alpha 2?

看到有个自动填充数字的功能(以前要在大括号里写序号,不知道是否提供中途指定序号的功能):
'{} {}'.format(1, 2) == '1 2'

其他没什么我关心的了,嘛,至少我觉得目前的2.6比3.x更出色。

在Python中进行整型与16进制字符串的转换

标签:Python

直接看代码吧,没什么需要多说的。
>>> '%x' % 1234
'4d2'
>>> hex(1234) # 这个比格式化字符串慢1个数量级,慎用
'0x4d2'
>>> int('4d2', 16)
1234
>>> eval('0x4d2') # 这个比int函数慢1个数量级,慎用
1234

« 看看还有什么好玩意