Python在if块或vice中定义函数

2024-05-04 10:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,我想根据模式采取不同的形式。我应该将定义包含在if语句中还是应该将if放在定义中?

# 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

我在过去做过这两件事,我的静态代码分析工具似乎没有抱怨。所以我想知道是否有一个Python的建议?

编辑:从目前的评论来看,这两种情况似乎都可以接受。这取决于用例。如果模式是恒定的,则首选情况1。如果不是,那么第二种情况。

EDIT2:这个问题实际上是在我写函数的时候产生的。它将输入模式作为输入,并根据模式执行类似的操作,但它使用单独在函数中为这些操作定义的不同子函数。由于子函数在函数运行期间保持不变,情况1似乎更合适。

编辑3:更正:在过去,我认为PyLint对案例1并不满意。这些天来,我使用了PyCharm,这似乎并没有表明案例1有任何问题。


Tags: 函数编辑returnif定义modedef模式
3条回答

您的函数行为不应依赖于外部值,因此我建议使用第一个示例:

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

取决于你想用它做什么。它们都可以以有用的方式使用。比较两个示例:

一。

    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的输出。

1/2:

def f(x):
    try:
        f.static_mode
    except AttributeError as ae:
        f.static_mode = mode
    if f.static_mode == 1:
        return x + 5
    else:
        return x - 5

二合一:(无意义)

相关问题 更多 >