python 自省的威力

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import string
def info(object):
    '''"Print methods and doc strings.
    Takes module, class, l ist, dictionary, or string.'''
    methodlist = [method for method in dir(object) if callable(getattr(object, method))]
    methodlist.sort(reverse=True)
    for m in methodlist:
        print '################################################'
        print '%s%s' % (m.ljust(20), getattr(object, m).__doc__)
    
if __name__ == '__main__':
    info(string)

info 函数的设计意图是提供给工作在 Python IDE 中的开发人员使用,它可以接受任何含有函数或者方法的对象 (比如模块,含有函数,又比如list,含有方法) 作为参数,并打印出对象的所有函数和它们的 doc string。

自省的核心:

1. getattr(object,name) 返回指定对象的指定属性的函数引用

2. and - or 的使用技巧

and 取第一个假值, 如果表达式全部为真,则去的是最后一个真元素: 如

>>> 'a' and 'b'
'b'
>>> '' and 'b'
''
>>> 'a' and 'b' and [] and 'c'
[]
>>> 
or 取第一个真值, 如果表达式全部为假,则去的是最后一个假元素: 如

>>> 'a' or 'b'
'a'
>>> '' or 'b'
'b'
>>> 'a' or 'b' or [] or '' or 'c'
'a'
>>> '' or [] or {} or () or 'a' or 'b'
'a'
>>> '' or []
[]
and 和 or一起使用,表示 bool ? a : b

>>> 1==1 and 'a' or 'b'
'a'
>>> 1!=1 and 'a' or 'b'
'b'
问题在于,当返回值需要空值时出现混乱:

>>> 1==1 and '' or 'b'
'b'
目的在于返回 '' 空字符串, 显然不是我们想要的值

解决:

>>> (1==1 and [''] or ['b'])[0]
''
使用列表包装选项值,使用元组存返回值,然后取元组第一个值

一般用于 lambda 函数中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值