码迷,mamicode.com
首页 > 其他好文 > 详细

Modifiers

时间:2014-10-02 14:14:33      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   for   sp   div   c   

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

标签:style   blog   color   io   ar   for   sp   div   c   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!