python 使用else代替状态变量详解编程语言

翻看公司的代码文档,在代码风格文档中,写着:为了提高代码的可维护性,代码中减少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摆脱一些累赘的状态变量,还是可取的。

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12484.html

(0)
上一篇 2021年7月19日 14:42
下一篇 2021年7月19日 14:42

相关推荐

发表回复

登录后才能评论