代码之家  ›  专栏  ›  技术社区  ›  NewNewton

python,一般函数:返回字符串并打印函数,还是只在函数中打印语句?

  •  1
  • NewNewton  · 技术社区  · 7 年前

    首先:这只是一个关于“最干净”的编码方式的问题。

    我用几个类和函数编写了一个Python脚本/程序,以存储一些西班牙语词汇。 最后,所有这些都集中在界面函数中,传递一些用户输入。大致如下:

    if __name__ == "__main__":
        while True:
        answ = raw_input("Please select an option below:\n"
                         "(1) New Vocab\n"
                         "(2) Testing Vocabs\n"
                         "(3) Search vocab (Edit|Delet)\n"
                         "(4) List all vocabs\n"
                         "(5) Show Boxes\n")
                         #...blabla
    
        os.system("clear")
    
        if INPUT(answ,"1"):
            IF_new_vocab(book)
            book.save_dic()
    
        elif INPUT(answ,"2"):
            IF_voc_query(book)
            book.save_dic()
    
        elif INPUT(answ,"3"): 
            book.search_vocab()
            book.save_dic()
        elif INPUT(answ,"4"):
            print book.show_cache()    #A
    
        elif INPUT(answ,"5"):
            book.update_boxes()
            book.show_boxes()          #B
        #...blabla
    

    现在我的问题是: 我是否应该返回一个字符串并尽可能晚地使用print,这将是本例中的“接口”。(例如选项A)? 或者输出(大多数情况下是字符串)是否应该由方法/函数本身打印(例如选项B)?

    我知道这根本不会影响整体产出。但我一直在想,是否有一个惯例或理由选择一个选项。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Teddy Ward    7 年前

    一定要让函数返回字符串并尽可能晚地打印!

    提前打印将违反 open-closed principle . 也就是说,一般来说,您的代码应该努力做到 已关闭以进行修改 . 这样可以确保,如果您以后决定要打印两次字符串输出,或将字符串输出传递给API,或将字符串输出保存在文件中,则无需修改将字符串组合在一起的原始代码(即 book.show_cache 功能)

    在某些情况下,您可能希望有时打印输出,有时将其保存在文件中,有时将其传递给API,有时执行其他操作。在这种情况下,如果您的代码在此之前 对扩展开放 ,这样您就可以简单地添加不同的函数/接口/处理程序,以不同的方式处理输出,而不必重写 show_cache 功能3-4不同时间处理不同用途。这是 strategy 设计模式!

    然后,您可能会得到如下结果:

    def print_cache():
      print book.show_cache()
    
    def save_cache_to_file():
      save(book.show_cache())
    
    def search_google_for_cache():
      // google.search(book.show_cache())
    

    这比:

    def print_cache():
      vocab = ['hola', 'como', 'estas', 'bien', 'y', 'tu']
      // more code?
      print vocab
    
    def save_cache_to_file():
      vocab = ['hola', 'como', 'estas', 'bien', 'y', 'tu']
      // more code?
      save(book.show_cache())
    
    def search_google_for_cache():
      vocab = ['hola', 'como', 'estas', 'bien', 'y', 'tu']
      // more code?
      // google.search(vocab)
    

    另外,在第二个示例中,如果您想添加更多的vocab,您必须记住在三个不同的地方进行操作,使代码更易于维护!