V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Newyorkcity
V2EX  ›  Python

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

  •  
  •   Newyorkcity · 2016-08-16 17:47:13 +08:00 · 3456 次点击
    这是一个创建于 3039 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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()可以发挥作用啊


    谢谢
    SErHo
        1
    SErHo  
       2016-08-16 18:03:33 +08:00   ❤️ 1
    你在哪儿学的 expr1 and expr2 这种形式会返回 tuple ,这个是个布尔运算啊: 如果 expr1 为真,则返回 expr2 的值,为假就直接返回 expr1 了
    Lonely
        2
    Lonely  
       2016-08-16 18:08:43 +08:00 via iPhone
    ……
    Newyorkcity
        3
    Newyorkcity  
    OP
       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
        4
    yexiaoxing  
       2016-08-16 19:50:10 +08:00 via Android   ❤️ 1
    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
        5
    yexiaoxing  
       2016-08-16 19:51:21 +08:00 via Android
    btw, 图片请传到微博或者别的没有访问权限的图床,或者给 V2EX 捐助以拿到自带图床权限
    lujjjh
        6
    lujjjh  
       2016-08-16 21:23:14 +08:00   ❤️ 1
    短路求值是现代编程语言里通用的逻辑运算符求值策略。

    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:32 · PVG 19:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.