Python 在函数结果前加上字符串
编辑: 作为练习,我需要在一个函数的结果前面加上一个字符串,该函数将在稍后定义。我认为使用一个装饰师,我显然错了;有什么建议吗 旧的: 这个代码将打印“女孩”,我想它打印“你好女孩”。Python 在函数结果前加上字符串,python,python-3.x,Python,Python 3.x,编辑: 作为练习,我需要在一个函数的结果前面加上一个字符串,该函数将在稍后定义。我认为使用一个装饰师,我显然错了;有什么建议吗 旧的: 这个代码将打印“女孩”,我想它打印“你好女孩”。 有什么办法吗?一个装饰程序用一个包装版本替换函数。如果再次更换,则装饰版本将消失 真的,你不应该这样做。但请记住,装饰者只是一个包装;如果要动态替换函数,那么首先不要修饰它们,只需在调用时应用包装器即可: print(my_decorator(myfunc)()) 如果您显式地将装饰器应用于重新定义的函数,则装
有什么办法吗?一个装饰程序用一个包装版本替换函数。如果再次更换,则装饰版本将消失 真的,你不应该这样做。但请记住,装饰者只是一个包装;如果要动态替换函数,那么首先不要修饰它们,只需在调用时应用包装器即可:
print(my_decorator(myfunc)())
如果您显式地将装饰器应用于重新定义的函数,则装饰器可以工作,正如其他人所提到的:
@my_decorator
def myfunc():
return "boy"
@my_decorator
def myfunc():
return "girl"
if __name__ == "__main__":
print(myfunc())
如果您不能静态地执行此操作,您仍然可以使用您的decorator代码按功能执行此操作:
def myfunc():
return "spot"
myfunc = my_decorator(myfunc)
为什么要覆盖第一个定义?你的问题的解决方案可能是不这样做。装潢师的工作方式和你想让他们工作的方式不同,你不能。您可以随时替换对象,您在这里就是这样做的。在替换名称或调用对象时,您必须重新应用装饰程序。我这样做是为了练习。我需要在一个函数的结果前面加上一个字符串,该函数将在第二时刻定义。我认为使用一个装饰师,我显然错了;我编辑了问题谢谢,所以使用装饰器是我需要做的错误方法,我编辑了问题
def myfunc():
return "spot"
myfunc = my_decorator(myfunc)