【问题标题】:How can I refactor this python script better?如何更好地重构这个 python 脚本?
【发布时间】:2022-01-06 13:43:07
【问题描述】:

我希望确保编写的代码没有不必要的代码行。有没有办法重构它并获得相同的输出?

def format_name(first_name, last_name):
    if len(first_name) > 0 and len(last_name) > 0:
        return("Name: " + last_name + ", " + first_name)
    elif len(first_name) > 0 or len(last_name) > 0:
        return("Name: " + first_name + last_name)
    else:
        empty_string = ""
        return empty_string
    return string 


print(format_name("Ernest", "Hemingway"))
# Should return the string "Name: Hemingway, Ernest"

print(format_name("", "Madonna"))
# Should return the string "Name: Madonna"

print(format_name("Voltaire", ""))
# Should return the string "Name: Voltaire"

print(format_name("", ""))
# Should return an empty string

【问题讨论】:

    标签: python python-3.x refactoring


    【解决方案1】:

    不要让“太高尔夫球”,这应该可以解决问题:

    def format_name(first_name, last_name):
        name = f"{first_name}, {last_name}".strip(", ")
        return f"Name: {name}" if name else ""
    

    【讨论】:

      【解决方案2】:

      重构的方法尝试在单个if 条件中分配函数的逻辑。

      def format_name(first_name, last_name):
          result = ''
          sep = ', ' if first_name and last_name else ' '
          
          if first_name or last_name:
              result = last_name + sep + first_name
              result = 'Name: ' + result.strip()
              
          return result
              
      print(format_name("Ernest", "Hemingway")) # "Name: Hemingway, Ernest"
      print(format_name("", "Madonna")) # "Name: Madonna"
      print(format_name("Voltaire", "")) # "Name: Voltaire"
      print(format_name("", "")) # `empty_string`
      

      【讨论】:

        【解决方案3】:

        使用str.joinfilter 构建名称字符串:

        def format_name(first_name, last_name):
            full_name = ", ".join(filter(None, (last_name, first_name)))
            if full_name:
                full_name = "Name: " + full_name
            return full_name
        

        【讨论】:

          猜你喜欢
          • 2014-08-19
          • 2020-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多