您的位置:首页 > 编程语言 > Python开发

python的自省能力真是强大

2007-11-09 09:59 477 查看
看了DIP有感而发,觉得python的自省能力真是强大

呵呵,请看分解


#-*- coding: utf-8 -*-


#selfdoc.py




__author__ = "livahu"




def info(object, spacing=10, collapse=1):


"""使用任何含有函数或者方法的对象(比如模块,含有函数,又比如list,含有方法)作为参数,并打印出对象的所有函数和它们的 doc string。"""




#得到参数对象的所有方法列表,过滤掉属性和None


methodList = [e for e in dir(object) if callable(getattr(object, e))]




#利用lambda定义处理函数,其中运行了and-or技巧,如果collapse为真就压缩空白,如果为假就保持原样


processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)




#join里是一个列表映射,也叫列表推导式," ".join返回一个多行的string


#ljust是左对齐,同时少字符就真空白,但决不会截断字符串


print " ".join(["%s %s" %


(method.ljust(spacing),


processFunc(str(getattr(object, method).__doc__)))


for method in methodList])




#这是if __name__技巧


if __name__ == "__main__":


print info.__doc__


>>> from selfdoc import info


>>> info([])




__add__ x.__add__(y) <==> x+y


__class__ list() -> new list list(sequence) -> new list initialized from sequence's items


__contains__ x.__contains__(y) <==> y in x


__delattr__ x.__delattr__('name') <==> del x.name


__delitem__ x.__delitem__(y) <==> del x[y]


__delslice__ x.__delslice__(i, j) <==> del x[i:j] Use of negative indices is not supported.


__eq__ x.__eq__(y) <==> x==y


__ge__ x.__ge__(y) <==> x>=y


__getattribute__ x.__getattribute__('name') <==> x.name


__getitem__ x.__getitem__(y) <==> x[y]


__getslice__ x.__getslice__(i, j) <==> x[i:j] Use of negative indices is not supported.


__gt__ x.__gt__(y) <==> x>y


__hash__ x.__hash__() <==> hash(x)


__iadd__ x.__iadd__(y) <==> x+=y


__imul__ x.__imul__(y) <==> x*=y


__init__ x.__init__(...) initializes x; see x.__class__.__doc__ for signature


__iter__ x.__iter__() <==> iter(x)


__le__ x.__le__(y) <==> x<=y


__len__ x.__len__() <==> len(x)


__lt__ x.__lt__(y) <==> x<y


__mul__ x.__mul__(n) <==> x*n


__ne__ x.__ne__(y) <==> x!=y


__new__ T.__new__(S, ...) -> a new object with type S, a subtype of T


__reduce__ helper for pickle


__reduce_ex__ helper for pickle


__repr__ x.__repr__() <==> repr(x)


__reversed__ L.__reversed__() -- return a reverse iterator over the list


__rmul__ x.__rmul__(n) <==> n*x


__setattr__ x.__setattr__('name', value) <==> x.name = value


__setitem__ x.__setitem__(i, y) <==> x[i]=y


__setslice__ x.__setslice__(i, j, y) <==> x[i:j]=y Use of negative indices is not supported.


__str__ x.__str__() <==> str(x)


append L.append(object) -- append object to end


count L.count(value) -> integer -- return number of occurrences of value


extend L.extend(iterable) -- extend list by appending elements from the iterable


index L.index(value, [start, [stop]]) -> integer -- return first index of value


insert L.insert(index, object) -- insert object before index


pop L.pop([index]) -> item -- remove and return item at index (default last)


remove L.remove(value) -- remove first occurrence of value


reverse L.reverse() -- reverse *IN PLACE*


sort L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息