2014-04-24 58 views
0

Python没有'is_even'方法或任何类型的整数。为什么Python没有整数的“均匀”方法,我应该怎么做呢?

为什么会出现这种情况?

此外,为了可读性,我是否应该在代码中编写is_even函数?

例如:

if integer_value % 2 == 0: 
    # Do something 

这是看不出来究竟是应该做的。

而这瞬间更容易理解:

if is_even(integer_value): 
    # Do something 

然而,这意味着我必须写一个is_even功能,我想它。

def is_even(integer): 
    if integer % 2 == 0: 
     return True 
    else: 
     return False 

什么是更好的选择?让代码本身具有可读性和明显的目的,或者到处都有评论?

要举一个最近的博客条目是做轮:

“通知也是这个办法强多少比使用注释如果你改变了逻辑上有你眼前的压力改变变量名。不是那样的评论,我同意DHH,评论是危险的,并且倾向于腐烂 - 更好地编写自我记录代码。“ - http://peternixey.com/post/83510597580/how-to-be-a-great-software-developer

我是否在考虑这个问题?

+3

如果有一个功能对数字的每一个数字属性,实施规模将非常快的增长。 – merlin2011

+4

'不清楚究竟应该做什么'。不,绝对不是。这是非常明显的,如果你写一些'is_even'的方法,它实际上会混淆人。 –

+1

我同意。当我看到'x%2'时,不管语言如何,立刻就会明白某人想要做什么。顺便说一句,实现你自己的'is_even'函数就像'is_even = lambda x:not x%2'一样简单 –

回答

1

创建本地函数 - 或使用lambda-通常没有问题 - 而且我通常会在他们使意图变得更加清晰时做到这一点。

然而,使此类语言的专用功能部分的通常是不必要的,并且为全局/内置函数(或甚至作为特定类型的方法)添加这样趋于头朝下的路径臃肿的核心:例如为什么不也is_primeis_natural

def do_my_stuff(numbers): 
    def is_even(i): 
     return i % 2 == 0 

    # use is_even, where it can be trivially referenced above 
    return map(numbers, is_even) 
+1

我会用更简短的形式:'is_even = lambda x:x%2 == 0' – user3159253

+1

@ user3159253我不能反驳这种说法,但出于某种美学原因,我在Python中的“偏好”是使用命名的defs。 – user2864740

+1

这是因为Python lambda很丑陋:) – user3159253

1

创建一个包含所有常用功能的实用程序模块,并仅将您的注释放在那里。稍后,在需要的地方导入实用程序模块并调用函数。所以,你不会多次写同一个函数,它变得易于维护。

此外,您is_even可缩短这样

def iseven(number): 
    """ 
    Checks if a number is even or odd 

    >>> iseven(5) 
    False 
    >>> iseven(6) 
    True 
    """ 
    return number % 2 == 0 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 
相关问题