2014-04-24 94 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() 
相關問題