内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

python中使用else代替状态变量

2018-03-12 16:55 出处:清屏网 人气: 评论(0

翻看公司的代码文档,在代码风格文档中,写着:为了提高代码的可维护性,代码中减少flag这类状态变量的使用。这个问题,平时确实没有想过,面对这种需求时,第一反应就是使用flag标记状态。那么使用什么样的技巧或代码结构才能,才能代替状态变量的使用呢?我想到的方法是应用else。

说到else,最常用的语法是if-elif-else,实际上else是可以与循环和try搭配使用的,下面我写了一个else替换状态变量的例子,使用插入法对数组排序。首先使用状态变量实现,代码如下:

def insertion_sort(input_list):
    if len(input_list) <= 1:
        return input_list
    _sorted = input_list[:1]

    for i in input_list[1:]:
        inserted = False
        for j in xrange(len(_sorted)):
            if i <= _sorted[j]:
                _sorted.insert(j, i)
                inserted = True
                break
        if not inserted:
            _sorted.append(i)
    return _sorted

使用inserted来标记新元素是否执行了插入操作,如果未执行的话,将元素插入到末位。

下面给出使用else替换inserted的代码实现:

def insertion_sort1(input_list):
    if len(input_list) <= 1:
        return input_list
    _sorted = input_list[:1]

    for i in input_list[1:]:
        for j in xrange(len(_sorted)):
            if i <= _sorted[j]:
                _sorted.insert(j, i)
                break
        else:
            _sorted.append(i)
    return _sorted

当for循环执行完整,中途没有break的话,就会执行else操作,也就起到了和inserted相同的作用。

else在try...except...else...finally的流程控制语法中同样适用,当程序没走进except时,就会使用else 中的代码,我们就不需要定义状态变量来记录程序是否走入except,代码如下:

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        print("error: division by 0!")
    else:
        print "result = %s" % result
    finally:
        print("divide finished!")

因为每个人的变成习惯不同,这种python独有的语法并不被提倡,而且如果代码嵌套了多层循环,那么使用else代替状态变量也降低了代码的可读性。但是如果python使用足够熟练,在一些简短的循环控制语句中,我们通过else摆脱一些累赘的状态变量,还是可取的。

分享给小伙伴们:
本文标签: elsepython

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号