Pythonic 函数重载?

Ton*_*res 0 python overloading function python-3.x

我无法理解干净的方法来做到这一点。我想要一个名为set_delay()带有各种参数的函数。我可以设置 3 种不同的“延迟类型”:恒定、均匀和正常。这是我目前拥有的:

def set_delay_constant(delay):
    continue

def set_delay_uniform(min_delay, max_delay):
    continue

def set_delay_normal(mean, std_dev, timeout):
    continue
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是每个函数中大约 80% 的代码是重复的。我见过的想法是:

def set_delay(delay_type, delay=None, min_delay=None, max_delay=None, mean=None, std_dev=None, timeout=None):
    continue
Run Code Online (Sandbox Code Playgroud)

但是当我需要用更多的延迟类型来扩展它时,我可以看到它变得非常长并且难以阅读。最“Pythonic”的方法是什么?谢谢你!

wja*_*rea 6

不要使用超载。如果您要解决的问题是“每个函数中大约 80% 的代码都是重复的”,更好的解决方案是将代码分解到自己的函数中,_set_delay例如调用它,然后从每个函数中调用它的set_delay_*功能。

对我来说,重载仅在参数重叠的情况下才有意义,但在您的情况下没有任何意义。作为对比,假设我写了range(10),但后来我意识到我想从 1 开始;由于重载,我可以简单地将其更改为range(1, 10). 同时,如果我在你的提议中添加一个论点set_delay,我会得到完全不同的行为