zoukankan      html  css  js  c++  java
  • 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摆脱一些累赘的状态变量,还是可取的。

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/baiyb/p/8545171.html
Copyright © 2011-2022 走看看