gpt4 book ai didi

python函数使用多个默认值或根本没有默认值

转载 作者:太空狗 更新时间:2023-10-30 02:46:59 30 4
gpt4 key购买 nike

我正在定义一个表示向量的类:

'''
An entity with size and direction
'''
UNINITIALIZED = -1

class myVector():
def __init__(self,direction = UNINITIALIZED,size = UNINITIALIZED):
self.direction = direction
self.size = size

为了使用这个类,我设想了 2 个场景:要么我知道向量在启动时的特征,然后用这些值启动它:

v = myVector(4,2)

或者我在启动时不知道这些,然后我很高兴它将获得默认值。

但是,通过上述实现,实现了第三种情况——仅使用第一个参数:

v = myVector(4)

在这种情况下,只有第二个参数 (size) 会被赋予默认值,生成的对象将没有多大意义。

在我看来,在这种情况下,所需的行为是要么使用两个参数,要么不使用。如果是这种情况,实现这一点的一种方法是引发异常。

def __init__(self,direction = UNINITIALIZED,size = UNINITIALIZED):
if (direction != UNINITIALIZED) and (size == UNINITIALIZED):
raise Exception('Use both parameters or none')
self.direction = direction
self.size = size

您认为优雅地执行此操作的 Pythonic 方式是什么?

最佳答案

大小和方向对我来说就像一个元组:

class myVector():    
def __init__(self, sd=(UNINITIALIZED, UNINITIALIZED)):
try:
self.size, self.direction = sd
except (ValueError, TypeError) as e:
raise ValueError('two values of size and direction must be specified')

如果不需要默认值,则使用大小和方向的元组调用它。

如果您不想更改语义以要求传递一个元组,如果您不使用其他参数,另一种方法是将 sd 更改为 *args 并执行相同的操作 - 即不过对我来说似乎不太明确,这意味着您不能将可选参数用于其他任何事情。

关于python函数使用多个默认值或根本没有默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17804286/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com