我正在尝试在python中执行以下操作:
def foo(x, y):
# do something at position (x, y)
def foo(pos):
foo(pos.x, pos.y)
因此,我想根据提供的参数数量调用不同版本的foo。这当然是行不通的,因为我重新定义了foo
。
实现这一目标的最优雅的方法是什么?我宁愿不使用命名参数。
通常,您要么定义两个不同的函数,要么执行类似的操作:
def foo(x, y = None):
if y is None:
x, y = x.x, x.y
# do something at position (x, y)
如果您习惯于具有重载的语言,那么定义两个不同函数的选项似乎很麻烦,但是如果您习惯于诸如Python或C之类的没有重载的语言,那么这就是您所要做的。上面的代码在Python中的主要问题在于,记录第一个参数有点尴尬,在两种情况下并不相同。
另一个选择是仅定义foo
带有pos的版本,还为用户提供类型:
Pos = collections.namedtuple('Pos', 'x y')
这样,任何会写的人都foo(x,y)
可以写foo(Pos(x,y))
。当然,由于必须创建对象,因此性能成本会有所降低。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句