В статически типизированных языках, таких как C ++, вы можете перегружать функции, основываясь на типах входных параметров (и количестве), но это на самом деле невозможно в Python. Может быть только одна функция с любым именем.
Что вы можете сделать, это использовать функцию аргумента по умолчанию для выбора одного из двух путей в пределах эта функция, что-то вроде:
def tmax(p1, p2, p3 = None):
# Two-argument variant has p3 as None.
if p3 is None:
return (p1 - p2) / 2
# Otherwise, we have three arguments.
return (p1 * p1 / (p1 * p1 - p2 * p2)) * p3
Если вам интересно, почему я изменил операции возведения в квадрат с n ** 2
на n * n
, это потому, что последняя работает быстрее ( или было в некоторый момент в прошлом, по крайней мере для малых целочисленных степеней, таких как 2
- это , вероятно, все еще имеет место, но вы можете подтвердить это.
возможен случай, когда может быть быстрее g1 ** 2
, чем g1 * g1
, где g1
является глобальным, а не локальным (это занимает больше времени для Python VM до LOAD_GLOBAL
, а не LOAD_FAST
). Это не относится к опубликованному коду, поскольку этот аргумент по своей сути не является глобальным.