python,一般函数:return 字符串和打印函数或只是函数中的打印语句?
python, functions in general: return string and print function OR just print statement in function?
起初:这只是关于"cleanest"编码方式的问题。
我写了一个 Python script/programm 有几个 类 和功能,来存储一些西班牙语词汇。
最后,所有这些都汇集在接口函数中,它传递一些用户输入。大致是这样的:
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
现在我的问题是:
我应该 return 一个字符串并尽可能晚地使用打印,在这种情况下就是 "interface" 。 (例如选项 A)?
或者输出,在大多数情况下是一个字符串,应该由 method/function 本身打印(例如选项 B)?
我知道它根本不会影响整体输出。但我一直想知道是否有约定或理由更喜欢一个选项。
肯定有return字符串的功能,越晚打印越好!
提前打印会违反 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)
另外,在第二个例子中,如果你想添加更多的词汇,你必须记住在三个不同的地方进行,让你的代码更容易维护!
起初:这只是关于"cleanest"编码方式的问题。
我写了一个 Python script/programm 有几个 类 和功能,来存储一些西班牙语词汇。 最后,所有这些都汇集在接口函数中,它传递一些用户输入。大致是这样的:
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
现在我的问题是: 我应该 return 一个字符串并尽可能晚地使用打印,在这种情况下就是 "interface" 。 (例如选项 A)? 或者输出,在大多数情况下是一个字符串,应该由 method/function 本身打印(例如选项 B)?
我知道它根本不会影响整体输出。但我一直想知道是否有约定或理由更喜欢一个选项。
肯定有return字符串的功能,越晚打印越好!
提前打印会违反 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)
另外,在第二个例子中,如果你想添加更多的词汇,你必须记住在三个不同的地方进行,让你的代码更容易维护!