为了账号安全,请及时绑定邮箱和手机立即绑定

None.strip() 单独运行时非法的,为何可以在lambda里运行?

None.strip() 单独运行时非法的,为何可以在lambda里运行?

正在回答

3 回答

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.



6 回复 有任何疑惑可以回复我~
#1

辣椒红烧肉3140712

短路原则,复习了一下
2016-04-13 回复 有任何疑惑可以回复我~

解释得真好!!

0 回复 有任何疑惑可以回复我~

解释的很清楚。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

None.strip() 单独运行时非法的,为何可以在lambda里运行?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信