是否每次通过Python中的循环计算测试条件?

时间:2014-02-23 08:03:11

标签: python compiler-construction

# returns sum of individual digits in n (incorrect implementation)
def digit_sum(n):
  running_sum = 0
  count = 0
  while count < len(str(n)):
    rightmost = n % 10         # value of right-most digit
    running_sum += rightmost
    n = n // 10                # strip right-most digit
    count += 1
  return running_sum

每次通过len(str(n))循环的每次迭代检查条件时是否计算while的值,或者第一次评估len(str(n))并存储一些位置以优化执行?

与以下循环相反:

# returns sum of individual digits in n (correct implementation)
def digit_sum(n):
  running_sum = 0
  for _ in xrange(len(str(n))):
    rightmost = n % 10         # value of right-most digit
    running_sum += rightmost
    n = n // 10                # strip right-most digit
  return running_sum

1 个答案:

答案 0 :(得分:2)

每次计算。 Python并不知道str(n)每次都会返回相同的东西。在编译时,据他所知,可以使用

实例调用此函数
class IAmABadPersonWhoWantsPeopleToHaveABadTime(int):
    def __str__(self):
        if random.random() < 0.1:
            raise SyntaxError
        return super(IAmABadPersonWhoWantsPeopleToHaveABadTime, self).__str__()

并且程序的正确性可能依赖于SyntaxError的10%几率。

此外,请勿将数字与range返回值进行比较。这绝对不是你想要的。 for循环更接近您想要的内容:

for _ in xrange(len(str(n))):

虽然使用while更简单:

while n:

n != 0一样长。