None.strip() 单独运行时非法的,为何可以在lambda里运行?
None.strip() 单独运行时非法的,为何可以在lambda里运行?
None.strip() 单独运行时非法的,为何可以在lambda里运行?
2015-12-22
Object.method() 是个基本的概念。 就是 对象.方法名(), 所以 如果 某个对象 想 调用 某方法,就需要保证 这个对象有这个方法, None 是没有strip()方法的, 只有字符串有。
代码里面也没有在 lambda语句里面调用 None.strip(). 代码:
print filter(lambda s: s and len(s.strip())>0, ['test', None, '', 'str', ' ', 'END'])
python里面其他数据类型往bool型转换时 可以隐性转化,并且and 和 or 在python中也是遵循 “短路”原则的:
a and b, 如果a为False, 则直接返回a的值,如果a为True,则返回b的值
a or b , 如果 a为False,返回b的值,如果a为True,返回a的值。
所以 上面代码执行到 None 时, 在 s and len(s.strip())>0 这段 ,根本没有执行and 后面的语句,直接返回了a的值,也就是None.
举报