我正在触摸旧的python函数,该功能当前返回列表。现在,它也需要返回状态代码。
但是,此更改将打破一些现有代码,对
所以我在想.....如果(从现在开始(我所有的函数都返回词典怎么办?然后,呼叫者将能够使用所需的数据,如果我决定在某个时候添加一些输出,旧代码就不会破坏。
我想知道这是否是以前实践的?我在这里错过了什么,还是这是个过分的?
编辑:
这是一个示例:
def GetDataFromWeb(url):
X = GetXFromWeb(url) # This function takes 5 seconds to complete
Y = GetYFromWeb(url) # This function also takes 5 seconds to complete
return X + Y
现在假设我们也需要产品x*y。一种解决方案是让另一个函数完成工作:
def GetDataFromWeb_2(url):
X = GetXFromWeb(url) # This function takes 5 seconds to complete
Y = GetYFromWeb(url) # This function also takes 5 seconds to complete
return X * Y
但是,我们同时需要总和和产品(因为昂贵的Web请求被称为两次(
明显浪费时间所以我们最终求助于:
def GetDataFromWeb(url):
X = GetXFromWeb(url) # This function takes 5 seconds to complete
Y = GetYFromWeb(url) # This function also takes 5 seconds to complete
return (X + Y, X * Y)
但是,现在,使用GetDataFromWeb((原始版本的代码将破坏。
我正在考虑的是这些行:
def GetDataFromWeb(url):
X = GetXFromWeb(url) # This function takes 5 seconds to complete
Y = GetYFromWeb(url) # This function also takes 5 seconds to complete
return {'sum' : X + Y}
总是可以增强到
def GetDataFromWeb(url):
X = GetXFromWeb(url) # This function takes 5 seconds to complete
Y = GetYFromWeb(url) # This function also takes 5 seconds to complete
return {'sum' : X + Y, 'product' : X*Y }
和旧代码仍然可以工作:
sum = GetDataFromWeb(url)['sum']
使用适配器模式怎么样?
https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_adapter.htm
适配器模式可作为两个不兼容接口之间的桥梁。 这种类型的设计模式属于结构模式 模式结合了两个独立接口的能力。
此模式涉及一个单一类,该类负责加入 独立或不兼容接口的功能。现实生活 示例可能是读卡器的情况,它充当适配器 在存储卡和笔记本电脑之间。您将存储卡插入 读卡器和读卡器进入笔记本电脑,以便存储卡 可以通过笔记本电脑读取。
适配器设计模式有助于一起工作。它转换 基于要求的类接口到另一个接口。 该模式包括一个形成一个多态性,该形态名称一个名称 和多种形式。说形状类可以按照 收集的要求。
编辑
使用关键字参数可能更简单。
def do(u, ops={'sum': sum}):
x = u[0]
y = u[1]
if len(ops) == 1:
return list(ops.values())[0]((x, y))
else:
return {k: o((x, y)) for k, o in ops.items()}
print(do([1, 2]))
print(do([1, 2], ops={'prod':lambda x: x[0] * x[1]}))
print(do([1, 2], ops={'sum': sum, 'prod':lambda x: x[0] * x[1]}))
甚至更简单。
def do(u, flag_new=False):
x = u[0]
y = u[1]
if flag_new is False:
return x + y
else:
return {'sum': x + y, 'prod': x * y}
print(do([1, 2]))
print(do([1, 2], flag_new=True))