2017-07-14 31 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