将需要修改的功能放在装饰器中的位置

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

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'))
lx58471571 回答:将需要修改的功能放在装饰器中的位置

您没有做的两件事;

  • 您需要替换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']
,

您的代码似乎有一些缺陷。

  • 首先,我不清楚ab在这里是否有些重要性;在我看来,最好不要使用它们:做def reverse_dna(*args):,然后遍历args
  • 第二,我偶然发现了

    if arg=='u':
        arg.replace('t','u')
    

    代码的编写方式无济于事:首先,arg永远不会'u',如果是,则t不会被{{ 1}}(顺序错误!),如果有的话,您将永远不会使用替换结果。

我会做类似的事情

u

我没有测试它,但这应该是解决方法。

本文链接:https://www.f2er.com/3037845.html

大家都在问