首页 > 解决方案 > 将需要修改的函数放在装饰器的什么位置

问题描述

有人可以解释我应该把函数放在哪里,以便我可以修改它以将给定字符串中的所有 u 更改为 t?到目前为止,这仅在我修改函数时返回 none

def my_decorator(func):

      def wrapper(**kwargs):  

         for arg in kwargs.values():
            if arg=='u':
               arg.replace('t','u')
         func(**kwargs)

      return wrapper



def reverse_dna(**kwargs):
   results=[]
   for arg in kwargs.values():
      if 'u' in arg:
         return 'this only works for dna'
      else:
         reverse=arg[::-1]
         results.append(reverse)
   return results

@my_decorator
def reverse_dna2(**kwargs):
   results=[]
   for arg in kwargs.values():
      if 'u' in arg:
         return 'this only works for dna'
      else:
         reverse=arg[::-1]
         results.append(reverse)
   return results

print(reverse_dna(a='augc', b='uagcagcagc'))
print(reverse_dna2(a='augc', b='uagcagcagc'))

标签: pythondecorator

解决方案


你没有做的两件事;

  • 您需要替换值kwargs本身
  • 你调用函数后没有返回值,你只是调用它并忘记使用return.

*

$ cat reverse_dna.py
def my_decorator(func):
    def wrapper(**kwargs):  
        for key, val in kwargs.items():
            kwargs[key] = val.replace('u', 't')
        return func(**kwargs)
    return wrapper

@my_decorator
def reverse_dna2(**kwargs):
   results=[]
   for arg in kwargs.values():
      if 'u' in arg:
         return 'this only works for dna'
      else:
         reverse=arg[::-1]
         results.append(reverse)
   return results

print(reverse_dna2(a='augc', b='uagcagcagc'))

输出:

$ python reverse_dna.py
['cgta', 'cgacgacgat']

推荐阅读