python - 避免使用长条件语句来调用具有相同参数但名称不同的函数?
问题描述
我有许多函数具有相同的参数,但在后台进行的计算略有不同。作为一个人为的例子:
def sum(a, b):
return a + b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
然后我发现自己不得不在一个单独的程序中调用这些函数,例如:
def myfunc(a, b, op):
if op == "add": return add(a, b)
if op == "multiply": return multiply(a, b)
# etc etc
有哪些 Pythonic 方法可以避免这种情况?我能想到的唯一选择是定义一个更通用的函数,如下所示:
def do_something(a, b, op):
if op == "add": return add(a, b)
if op == "multiply": return multiply(a, b)
# etc etc
def myfunc(a, b, op):
return do_something(a, b, op)
这更干净,myfunc
但仍然具有长条件语句的缺点。
有人有建议吗?
谢谢!
解决方案
传递函数而不是字符串呢?
def sum(a, b):
return a + b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
def myfunc(a, b, op):
return op(a, b)
print(myfunc(2, 3, add))
print(myfunc(2, 3, multiply))
print(myfunc(2, 3, divide))
如果您更喜欢将操作作为字符串传递,您可以使用eval
:
def sum(a, b):
return a + b
def multiply(a, b):
return a * b
def divide(a, b):
return a / b
def myfunc(a, b, op):
return eval(op)(a, b)
print(myfunc(2, 3, "add"))
print(myfunc(2, 3, "multiply"))
print(myfunc(2, 3, "divide"))
推荐阅读
- c# - UWP:使用 NTLM 凭据调用 PUT Webservice
- c# - C# 搜索 DataTable 性能
- c# - 使用 AutoMapper.Data 进行自定义类型转换
- python - keycloak api 用户创建
- javascript - 反引号字符在 javascript 中创建字符串模板
- spring - Cloud Sleuth 从 SpringBoot 1.5 更改为 2.x
- vba - 在 Word 中使用 Visual Basic 将方程式中的所有 Cambria Math 斜体字体更改为非斜体
- django - Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向
- r - R:根据另一个变量在数据框中添加行
- html - 在图像之间添加空格