5、使用lambda函数

5.1、Python支持一种有趣的语法,它允许你快速订阅单行的最小函数。这些叫做lambda的函数,是从Lisp借用来的,可以在任何需要函数的地方。

5.2、真实世界的lambda函数:processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)

这句话的意思是:processFunc 现在是一个函数,但它到底哪还要取决于 现在是一个函数,但它到底哪还要取决于collapse变量,如果 collapse为真,processFunc(string) 将压缩空白;否则 processFunc(string)将返回未改变的参数。

5.3、例子:split()不带参数

>>> s
 'this is \na\ttest'
 >>> print s
 this is
 a       test
 >>> print s.split()
 ['this', 'is', 'a', 'test']
 >>> print ' '.join(s.split())
 this is a test
 >>>

总结:将函数赋值给变量 然后通过引用变量调函数。我强的已经够多了,这种思考方式对于提高对Python 的理解力至关重要。在本书中你会随处可见这种技术的更复杂应用。


6.类

6.1、Python必须显示地调用在父类中的合适方法。

6.2、__init__方法是可选的,但是一旦你定义了,就必须记得显示调用父类的__init__方法(如果它定义了的话)。这样更是正确的:无论何时子类想扩展父类的行为,后代方法必须在适当的时机,使用适当的参数,显示调用父类方法。

6.3、注意__init__方法从不返回一个值。

6.4、创建一个新的实例是容易的,那么销毁它们甚至更容易。通常,不需要明确地释放实例,因为当指派给它们的变量超出作用域时,他们会被自动的释放。内存泄漏在Python中很少见。

6.5、专用类方法

6.5.1、__getItem__

6.5.2、__setItem__

6.6、高级专用类方法

6.6.1、__repr__是一个专用的方法,在当调用repr(instance)时被调用。repr函数是一个内置函数,它返回一个对象的字符串表示,它可以用在任何对象上,不仅仅是类的实例。用法说明: x.__repr__() <==> repr(x)

6.6.2、__cmp__在比较类实例时被调用。通常,你可以通过使用==比较任意两个Python对象,不只是类实例。使用说明: x.__cmp__(y) <==> cmp(x,y)

6.6.3、__len__在调用len(instance)时被调用。len是一个内置函数,可以返回一个对象的长度。它可以用于任何被认为理应有长度的对象。字符串的len是它的字符个数;字典的len是它关键字的个数;列表或者序列的len是元素的个数。对于类实例,定义__len__方法,接着自己编写长度的计算,然后调用len(instance),Python将替你调用你的__len__专用方法。

6.6.4、__delitem__在调用del instance[key]时调用,你可能记得它作为从dict里删除单个元素的方法。当你在类实例中使用del时,Python替你调用__delitem__专用方法。

6.7、类属性

6.7.1、私有表示方法:函数、类方法或者属性的名字以两个下划线开始(但不是结束),它是私有的;其它所有都是公有的。

6.7.2、私有函数不可以从他们的模块外面被调用;私有类方法不可能从它们的类外面被调用;私有属性不能从它们的类外面被访问