[英]Python methods and “switches”
我正在尝试使用字典作为switch语句,如
def add(first, second):
return first + second
def sub():
...
return something
operations = {
"Add": add,
"Sub": sub
}
ret_val = operations[operation]
现在如何传递参数add和sub并获得它们的响应? 目前,我没有将任何内容传递给方法,也没有测试ret_val。 我看到的是调用了该操作,但是返回没有回来。 我得到的是操作方法的指针。
谢谢!
要调用函数,请将参数放在括号后,就像直接按函数名称调用函数一样。
ret_val = operations[operation](1, 2)
请注意,为使此功能正常运行, operations
所有功能都需要采用相同数量的参数。 因此,如您所示,如果add()
接受两个参数,而sub()
不接受两个参数,那么它将不起作用。
如果函数可以使用不同数量的参数,则可以将参数放在列表中并使用解压缩运算符。
args = (1, 2)
ret_val = operations[operation](*args)
然后,您只需要确保args
包含用于特定操作的适当数量的参数即可。
字典包含可调用的函数。 要调用它们,只需在括号中添加参数即可。
operations[operation](arg1, ...)
因此,您最缺少的是执行函数调用。 提供的代码可以正确获取功能引用,但是您需要parens来执行它。
一旦执行它,就需要某种方式来传递参数。 由于args的数量因函数而异,所以最好的方法是传递可变数量的args列表( *args
)和关键字参数字典( **kwargs
)。
我已经稍微填写了您的伪代码,因此可以运行:
def add(first, second):
return first + second
def sub(first, second):
return first - second
operations = {
"Add": add,
"Sub": sub,
}
用args调用add:
op = 'Add'
op_args = [1, 2]
op_kwargs = {}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
3
用kwargs调用add:
op = 'Add'
op_args = []
op_kwargs = {'first': 3, 'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
7
如果您尝试以冲突的方式传递args和kwargs,那么它将失败:
# WON'T WORK
op = 'Add'
op_args = [1, 2]
op_kwargs = {'first': 3, 'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
TypeError:add()为参数'first'获得了多个值
但是,您可以两种方式互补使用:
op = 'Add'
op_args = [1]
op_kwargs = {'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
5
一个技术说明是args
和kwargs
的命名纯粹是Python中的约定。 您可以随便叫他们。 这里提供了讨论另外两个的答案: https : //stackoverflow.com/a/36908/149428 。
请注意,出于简单而集中的答案,我没有进行任何输入验证等。 如果您从用户那里得到输入,那是要记住的重要步骤。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.