• 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摆脱一些累赘的状态变量,还是可取的。

  • 相关阅读:
    Django——form组件和ModelForm
    CDH hadoop的安装
    Vulnhub-靶机-PRIME: 1
    Vulnhub-靶机-SYMFONOS: 5
    sqlilab-Less-21-30-writeup
    Vulnhub-靶机-SYMFONOS: 4
    Vulnhub-靶机-SYMFONOS: 3
    基础汇总-sqlilab-Less-1-20
    sqlilab-Less-13-19 测试writeup
    sqlilab-Less-9-12 测试writeup
  • 原文地址:https://www.cnblogs.com/baiyb/p/8545171.html
Copyright © 2020-2023  润新知