请问 return s and s.strip()时为什么不返回一个 tuple(s,s.strip()),为什么可以返回布尔量?

2016-08-16 17:47:13 +08:00
 Newyorkcity
http://fj.ikafan.com/attachment/forum/201608/16/172641fqf38k88ickfcw77.png.thumb.jpg

如图所示,
第一个结果应当返回(A,A)
第二个结果应当也无法返回,虽然一个函数如果没有敲定 return 什么,那么自然应该返回 None.可是现在函数已经指明了返回的内容,
None 作为 s 返回么?
那为什么我使用数字比如 21 的时候就报错呢?
第三个结果应当返回(空格空格 A,A)这样

到底是为什么?????
http://fj.ikafan.com/attachment/forum/201608/16/173021qjd5ejcceex7xht7.png.thumb.jpg


此问题的来源是在学 filter()函数时候的疑惑..
如图所示,return s and s.strip()的时候是怎么返回布尔量的?凭什么 filter()可以发挥作用啊


谢谢
3384 次点击
所在节点    Python
6 条回复
SErHo
2016-08-16 18:03:33 +08:00
你在哪儿学的 expr1 and expr2 这种形式会返回 tuple ,这个是个布尔运算啊: 如果 expr1 为真,则返回 expr2 的值,为假就直接返回 expr1 了
Lonely
2016-08-16 18:08:43 +08:00
……
Newyorkcity
2016-08-16 18:12:36 +08:00
@SErHo
expr1 为真则返回 expr2? 那我这里 expr1 为 s (即输入数据本身)的时候是不是总是返回 s.strip()?
然后 expr1 怎么判断真假呢? 比如输入的为 input input == expr1 这样?还是 isinstance(expr1,input)这样?
另外为什么输入 None 会成功返回 None 呢?
谢谢
yexiaoxing
2016-08-16 19:50:10 +08:00
return expr1 and expr2
expr1 和 expr2 都是判断语句而已,如果 expr2 是 s.strip(),如果结果不为空就是 True
效果就像是
if expr1 and expr2:
return True
else:
return False

如果你要返回一个 tuple ,试试 return s, s.strip()
yexiaoxing
2016-08-16 19:51:21 +08:00
btw, 图片请传到微博或者别的没有访问权限的图床,或者给 V2EX 捐助以拿到自带图床权限
lujjjh
2016-08-16 21:23:14 +08:00
短路求值是现代编程语言里通用的逻辑运算符求值策略。

Python 里
s and s.strip()
等同于
s.strip() if s else s

return s and s.strip()
就等同于
if s:
   return s.strip()
else:
   return s

并非像楼上说的那样。

具体 Python 里对 and 和 or 是怎么求值的,以及什么表达式视为 True 什么表达式视为 False ,看这里
https://docs.python.org/3/reference/expressions.html#booleans

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/299705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX