在函数结果前面添加一个字符串

时间:2016-02-17 17:51:25

标签: python python-3.x

编辑: 作为练习,我需要在一个函数的结果前面添加一个字符串,该函数将在第二个时刻定义。我虽然使用装饰师但我显然是错的;关于如何做的任何建议?

OLD:

def my_decorator(func):
    def wrapped(*args, **kwargs):
        return "hello {0}".format(func(*args, **kwargs))
    return wrapped

@my_decorator
def myfunc():
    return "boy"

def myfunc():
    return "girl"

if __name__ == "__main__":

    print(myfunc())

此代码将打印“女孩”,我想打印“你好女孩”。 有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

装饰器用包装版本替换该函数。如果你再次更换它,装饰版本就会消失。

真的你不应该这样做。但请记住,装饰器只是一个包装器;如果您要动态替换函数,那么首先不要修饰它们,只需在调用它时应用包装器:

print(my_decorator(myfunc)())

答案 1 :(得分:1)

如果您明确将其应用于重新定义的函数,那么您的装饰器就可以工作,正如其他人提到的那样:

if..else

如果您不能静态地执行此操作,您仍然可以使用装饰器代码来执行此操作:

@my_decorator
def myfunc():
    return "boy"

@my_decorator
def myfunc():
    return "girl"

if __name__ == "__main__":

    print(myfunc())