Python学习笔记2-自省(反射)、lambda
def info(object, spacing=10, collapse=1): """Print methods and doc strings. Takes module, class, list, dictionary, or string.""" methodList = [method for method in dir(object) if callable(getattr(object, method))] processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s) print "\n".join(["%s %s" % (method.ljust(spacing), processFunc(str(getattr(object, method).__doc__))) for method in methodList]) if __name__ == "__main__": print info.__doc__
可选参数:def info(object, spacing=10, collapse=1):
type 函数返回任意对象的数据类型
str 将数据强制转换为字符串。每种数据类型都可以强制转换为字符串。
dir 函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象 …… 相当多的东西。
最后是 callable 函数,它接收任何对象作为参数,如果参数对象是可调用的,返回 True;否则返回 False。可调用对象包括函数、类方法,甚至类自身
使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用
理论上,getattr 可以作用于元组,但是由于元组(tuple)没有方法,所以不管你指定什么属性名称 getattr 都会引发一个异常
getattr 不仅仅适用于内置数据类型,也可作用于模块。
getattr 能够使用可选的第三个参数,一个缺省返回值。
过滤列表语法:
[mapping-expression for element in source-list if filter-expression]
and 和 or 的特殊性质
在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样。但是它们并不返回布尔值,而是返回它们实际进行比较的值之一。
如果布尔环境中的某个值为假,则 and 返回第一个假值。所有值都为真, and 返回最后一个真值
使用 or 时,在布尔环境中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值。如果所有的值都为假,or 返回最后一个假值。
bool ? a : b 表达式,如果 bool 为真,表达式演算值为 a,否则为 b。基于 Python 中 and 和 or 的工作方式,你可以完成相同的事情。
>>> b = "second" >>> 1 and a or b 'first' >>> 0 and a or b 'second'
安全使用 and-or 技巧: (1 and [''] or ['b'])[0]
由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素.
>>> def f(x): ... return x*2 ... >>> f(3) 6 >>> g = lambda x: x*2 >>> g(3) 6 >>> (lambda x: x*2)(3) 6
总的来说,lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。lambda 函数不能包含命令,包含的表达式不能超过一个。不要试图向 lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
在 SQL 中,你必须使用 IS NULL 代替 = NULL 进行 null 值比较。在 Python,你可以使用 == None 或者 is None 进行比较,但是 is None 更快。
"hello".ljust 用空格填充字符串以符合指定的长度。如果指定的长度小于字符串的长度,ljust 将简单地返回未变化的字符串。它决不会截断字符串.
![](http://pic002.cnblogs.com/img/QLeelulu/200908/2009080113232717.jpg)
![Follow QLeelulu on Twitter](http://twitter-badges.s3.amazonaws.com/follow_me-a.png)
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利