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
呵呵,请看分解
#-*- 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
相关文章推荐
- python 学习笔记 9 -- Python强大的自省简析
- Python——写自己的异常(形成强大的捕捉和处理能力)
- python 学习笔记 9 -- Python强大的自省简析
- Scala:强大的XML处理能力
- python3---->比urllib更为强大的requests
- python-双均线策略的预测能力研究
- python中强大的format函数
- CMS发哥谈小程序:没那么强大神秘与颠覆能力却是值得反思注意
- python之强大的日志模块 - 竹叶青 的专栏 - 博客频道 - CSDN.NET
- 提高PYTHON编程的能力---阅读源代码
- 三十、十分钟掌握最强大的python爬虫
- Python自省(反射)指南
- 感觉Python比较强大
- 多套方案来提高python web框架的并发处理能力
- 无比强大!Python抓取cssmoban站点的模版并下载
- google的地图搜索功能真是强大,可以看到深圳地王
- 用python玩转数据|强大的数据结构和python扩展库
- PyCharm - 又一强大Python IDE
- python的with语句,超级强大
- TurboMail手机客户端—强大的附件文档阅读能力