以下两个案例描述了我的困境。我想了解代码何时更稳定。
案例A
from sys import argv
a = float( argv[1] )
b = float( argv[2] )
if a == 0.:
exit(1)
else:
print b / a
exit( 0 )
案例B
from sys import argv
a = float( argv[1] )
b = float( argv[2] )
if a == 0.:
exit(1)
print b / a
exit( 0 )
答案 0 :(得分:2)
这两种方法都提供相同的稳定性,因为从本质上讲,它们都是一样的。
但是,第一个不必要地使用else
。如果代码命中exit(1)
行,它会立即退出脚本。意思是,else
没有任何积极的贡献(例如流量控制)。实际上,它所做的就是占用一条线并导致不必要的缩进。
所以,如果你想知道选择哪种方法,我会说要使用第二种方法。它更干净,使用更少的语法来完成同样的工作。
此外,由于退出脚本通常意味着发生异常和不良事件,仅使用if
而不使用else
会使您更加清楚地防止发生异常事件。
答案 1 :(得分:2)
您应该尝试使代码更简洁,并且更好地使用它:
import sys
def main():
a, b = map(float, sys.argv[1:2])
if a == 0:
return 1
print b / a
if __name__ == '__main__':
sys.exit(main())
这样您将始终获得退出代码,如果a
等于0
,则退出代码将为非零。
答案 2 :(得分:2)
两个代码片段都有效且没有错误。但是,他们表达的观点略有不同。
第一种状态:根据a的值,做这个或那个。
第二种说法:如果a不合适,则中止。 (并继续。)
所以第一个看到两个版本同样作为算法的一部分,而第二个版本可以很容易地被读作“如果这个罕见的变体,只是中止”。
这对运行时间或稳定性没有影响(如你所说)。但你应该考虑你想要表达的内容。维护代码的下一位开发人员可能会受到帮助或混淆,具体取决于您所表达的内容。
此外,稍后修补代码,扩展代码等受到编写代码的方式的影响。预计这是一种高级艺术形式,但当你提出这样的问题时,它应该在你的脑后。
在你的情况下,我猜第一个版本更容易引入后面的错误,因为它有第二个分支的两个块(if
的“then”分支,而下面的那个执行{ {1}})。这是一个轻微的缺陷,只要你想延长它就为变种留出了空间。例如,如果要为结果加下划线,则有两个选项:
exit(0)
和
if a == 0.:
exit(1)
else:
print b / a
print '----'
exit(0)
哪个更好?或者也许if a == 0.:
exit(1)
else:
print b / a
print '----'
exit(0)
应该是“then”块的一部分?这些是我更喜欢第二个版本的原因。
答案 3 :(得分:0)
在第一个声明中
print b/a
仅适用于以下情况 如果没有'等于0。: