对所有贡献者的快速提问。例如,是否有可能(例如通过装饰器等)实现类似的目的?
if input == 'X':
#only use the 'X' versions
elif input == 'Y'
#only use the 'Y' versions
else: # Error out
def printer():
print("X")
def returner():
print("X")
def printer():
print("Y")
def returner():
print("Y")
我试图定义附加到每个函数的特定装饰器,例如:
input = 'X'
try:
if input == 'X':
def x(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
return wrapper
elif input == 'Y':
def y(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
return wrapper
else: # Error out
pass
except NameError as e:
pass
@x
def printer():
print("X")
@x
def returner():
print("X")
@y
def printer():
print("Y")
@y
def returner():
print("Y")
任何帮助/协助将不胜感激。谢谢!
答案 0 :(得分:1)
只需在if
块中定义函数本身即可:
if input == 'X':
def printer():
print("X")
def returner():
print("X")
elif input == 'Y'
def printer():
print("Y")
def returner():
print("Y")
else: # Error out]
在您的原始代码中,功能没有“版本”;一经定义,Y版本就会取代X版本。
或者,您可以定义一个函数,根据输入来制作printer
和returner
:
def maker(arg):
if arg not in ["X", "Y"]:
raise ValueError()
def printer():
print(arg)
def returner():
print(arg)
return printer, returner
printer, returner = maker(input)
答案 1 :(得分:0)
如果我理解您的问题,那么您想要的是什么
def printer_x():
print("X")
def returner_x():
print("X")
def printer_y():
print("Y")
def returner_y():
print("Y")
dispatch_dict = {'X' : (printer_x,returner_x),
'Y' : (printer_y, returner_y)}
现在,您可以执行以下操作:
printer,returner = dispatch_dict[input_val]