Python: 合并两个函数

Python: Combining two functions

我通常不是 Python 用户。有人可以帮我把下面的两个功能合二为一吗?

def Reverse(Pattern):
    rev = []
    n = len(Pattern)
    for i in range(n):
        n = n-1
    rev.append(Pattern[::-1])
    return rev[0]

def Complement(Pattern):
  complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
  nucleotides = []
  for i in Pattern:
      nucleotides += complements[i]
  return "".join(nucleotides)

我想把它合并成这个:

def ReverseComplement(Pattern):   
    rev = []
    n = len(Pattern)
    for i in range(n):
        n = n-1
    rev.append(Pattern[::-1])
    return rev[0] ##I've tried getting rid of this but it's not working properly
    complements = {"A":"T", "T":"A", "G":"C", "C":"G"}
    nucleotides = []
    for i in rev:
        nucleotides += rev[i]
    return "".join(nucleotides)

作为测试,"ACACAC" 应该 return "GTGTGT"。

一般来说,如果您想组合两个您已经编写的函数,您可以简单地组合它们,只需调用一个函数并使用另一个函数的 return 值即可:

def reverse_complement(pattern):
    return Reverse(Complement(pattern))

简单地重用您已经编写的代码几乎总是比复制+粘贴代码更可取。拥有多个代码版本只会增加错误出现的表面积,并增加维护代码所涉及的工作;如果你写一个版本的功能,你只需要写一组测试,你只需要修复一个地方的错误。

不过,在这种特殊情况下,您编写的很多代码都可以丢弃或简化。 Reverse 函数已经直接内置到 Python 中(名称为 reversed),并且 Complement 函数可以缩短为单个 map 调用字典。总之就是:

def reverse_complement(pattern: str) -> str:
    complements = {"A": "T", "T": "A", "G": "C", "C": "G"}
    return "".join(map(complements.get, reversed(pattern)))
def ReverseComplement(Pattern):
    complements = {"A":"G", "G":"A", "T":"C", "C":"T"}
    nucleotides = []
    for i in Pattern:
        nucleotides += complements[i]
    return "".join(nucleotides)

print(ReverseComplement("ACACAC"))

translate 函数可能是一个不需要列表的解决方案。

def rev_comp(pattern):
    return pattern.translate(str.maketrans('ATGC', 'TACG'))[::-1]

pat = "ACACAC"

print(rev_comp(pat))

打印:

GTGTGT