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]

 

andor 的特殊性质

在Python 中,andor 执行布尔逻辑演算,如你所期待的一样。但是它们并不返回布尔值,而是返回它们实际进行比较的值之一

如果布尔环境中的某个值为假,则 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] 是一个非空列表,所以它决不会为假。即使 a0 或者 '' 或者其它假值,列表 [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 将简单地返回未变化的字符串。它决不会截断字符串.

posted on 2008-11-01 17:19  Q.Lee.lulu  阅读(1636)  评论(0编辑  收藏  举报