2017-07-14 69 views
0

我有一個函數我想根據模式採取不同的形式。我應該在if語句中包含定義還是應該將if放入定義中?Python的定義內,如果功能塊或反之亦然

# Case 1 
if mode == 1: 
    def f(x): 
     return x + 5 
else: 
    def f(x): 
     return x - 5 

# Case 2 
def f(x): 
    if mode == 1: 
     return x + 5 
    else: 
     return x - 5 

我已經在過去和靜態代碼分析工具似乎沒有抱怨。所以我想知道是否有Pythonic推薦?

編輯:從迄今爲止的意見,這兩種情況似乎可以接受的。這取決於用例。如果模式旨在保持不變,則優先考慮情況1。如果沒有,那麼情況2.

EDIT2:這個問題實際上出現了,因爲我在寫一個函數。它採用模式作爲輸入,取決於模式執行類似的操作,除了它使用單獨定義在這些操作的函數內的不同子功能。由於子功能在功能運行期間保持不變,因此情況1似乎更合適。

EDIT3:更正:在過去,我相信這是pylint的,這是不舒服的情況1.這些天來,我用PyCharm和似乎沒有標誌沒有任何問題與案例1

+3

如果你1只檢查一次條件。 – vaultah

+0

第二種似乎更通用。例如,如果模式在某個點發生了變化,該怎麼辦?案例2仍然在這裏工作,而案例1不會。 – arshajii

+3

你打算如何使用該功能?你的兩個例子給出不同的行爲。在第一種情況下,你決定一次,然後你得到的功能就被修復了。在情況2中,每次調用函數時都要重新做出決定。 – BrenBarn

回答

0

Depends中在你想用它的東西上。它們都可以以有用的方式使用。比較兩個例子:

1.

Mode = 1 
    Number = 0 
    def f(x): 
     global Mode 
     if Mode == 1: 
      Mode = 0 
      return x + 5 
     else: 
      Mode = 1 
      return x - 5 

    for i in range(0,5): 
     Number += f(i) 

對戰:

2.

Mode = 1 
    Number = 0 
    if Mode == 1: 
     def f(x): 
      return x + 5 
    else: 
     def f(x): 
      return x - 5 
    for i in range(0,5): 
     number += f(i) 

其中第一個例子是最好的,當你想在代碼模式之間切換在跑。第二個是最好的,如果你只是想要一個或另一個。第一個功能總是給你答案15,因爲模式在運行時會改變。但是,第二個函數將根據您將模式設置爲第一位的方式給出35或-15的輸出。

0

你的行爲的功能不應該依賴於外部值,所以我會建議使用第一個例子:

# Case 1 
if mode == 1: 
    def f(x): 
     return x + 5 
else: 
    def f(x): 
     return x - 5