python - 为什么会不需要else
PHPz
PHPz 2017-04-17 15:59:24
[Python讨论组]

def cmp_ignore_case(s1, s2):
    v1= s1.upper()
    v2= s2.upper()
    if v1 < v2:    
        return -1
    if v1 > v2:
        return 1   
    return 0        //为什么加和不加else的结果都是一样的,是程序本身问题还是语法问题?    

print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)

最后的return语句块,为什么不需要加上else语句呢?在什么情况下是可以省略的呢?

PHPz
PHPz

学习是最好的投资!

全部回复(8)
高洛峰
def cmp_ignore_case(s1, s2):
    v1= s1.upper()
    v2= s2.upper()
    if v1 < v2:    
        return -1
    if v1 > v2:
        return 1
        

我们有3个结果:
v1 < v2
v1 > v2
v1 = v2
而上面的程序已经有了判断v1 < v2 ,v1 > v2 。
当 v1 < v2 的时候,return -1,如果是v1 〉v2 则绕过首个return语句,继续执行 if v1 > v2 :语句,然后进入语句块return 1。
而如果v1 = v2 ,这个时候if v1 > v2 的语句不成立,跳过去,则执行第三个return,return 0.

天蓬老师

遇到return的时候,后面的程序就不执行了。

阿神

你在return后面写个语句试试

黄舟

这个问题有点太小白了。有点让人无法回答。
v1 == v2时:

  • 若存在else,执行return 0

  • 不存在else,执行return 0

我感觉你的问题里已经包含了答案。

天蓬老师

return 的时候就已经退出函数了
如果v1大于v2 return -1;后面的不会再执行
如果v1小于v2 return 1;后面的也不会再执行
只有v1等于v2时 回执行到return 0;

PHP中文网

看了下前面的答案,我也是醉了!if~else语法上就允许这样写好么!

迷茫

本身没什么对错问题,只是从易维护角度来讲,早用return更好读。请看return-statement

高洛峰

其实和 return 没有关系,本来这两个 if 的条件就是相互独立的,不可能存在同时符合两个 if 的情况,所以有没有 else 其实没什么关系。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号