首页 > 其他 > 详细

Modifiers

时间:2014-10-02 13:43:23      阅读:211      评论:0      收藏:0      [点我收藏+]

Sometimes it is useful for a function to modify the objects it gets as parameters. In that case, the changes are visible to the caller. increment, which adds a given number of seconds to a Time object, can be written naturally as modifier.

def increment(self,seconds):
        self.second += seconds
        if (self.second>=60):
            self.second-=60
            self.minute+=1
        if(self.minute>=60):
            self.minute-=60
            self.hour+=1

Is this function correct? What happens if the parameter seconds is much greater than sixty? In that case, it is not enough to carry once; we have to keep doing it until time.second is less than sixty. One solution is to replace the if statements with while statements. That would make the function correct, but not very efficient.

Write a correct version of increment that doesn’t contain any loops

def increment(self,seconds):
        self.second += seconds
        temp = int(self.second / 60)
        if (temp>=1):
            self.second-=60*temp
            self.minute+=temp
        temp = int(self.minute / 60)
        if(temp >=1):
            self.minute-=60*temp
            self.hour+=temp
        temp = int(self.hour / 24)
        if(temp>=1):
            self.hour-= 24*temp

Anything that can be done with modifiers can also be done with pure functions. In fact, some programming languages only allow pure functions. There is some evidence that programs that use pure functions are faster to develop and less error-prone than programs that use modifiers. But modifiers are convenient at times, and functional programs tend to be less efficient.

 

from Thinking in Python

 

Modifiers

原文:http://www.cnblogs.com/ryansunyu/p/4004022.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!