在我的代码中,我正在打印菜单
print(num_chars * char)
for option in options:
print("{:d}. {:s}".format(option, options[option]))
print(num_chars * char)
代码print(num_chars * char)
打印分隔符/分隔符以“美化”输出。我从几个编码教程中了解到,我不允许多次编写相同的代码。
定义函数
是否真的更可取def get_char_repeated(char='*', num_chars=30):
"""
Return the character repeated an arbitrary number of times
"""
return num_chars * char
并在原始代码中调用两次?
如果我需要从字典中打印漂亮的菜单,还有其他选择吗?
谢谢。
答案 0 :(得分:3)
我从几个编码教程中了解到,我不允许多次编写相同的代码。
这个名为“不要重复自己”(DRY)的原则是一个很好的粗略指导方针。对于每个编写太多函数的程序员(将代码分成太小的单元),有20个人写的太少。
不要过分夸大它。 DRY背后的原因是更容易阅读和更改代码。 App plays audio or streams audio/video using Airplay
已经非常基本,并且非常易于理解和更改,因此将其纳入函数并不值得付出代价。
如果重复的代码增长到3行,那么你可以(并且可能应该)将其考虑在内。
答案 1 :(得分:0)
在那个级别没有必要。可能有用的是,如果您经常执行整个代码块,则可以轻松地将其更改为
def printOptions(options, char='*', num_chars=30):
print(num_chars * char)
for option in options:
print("{:d}. {:s}".format(option, options[option]))
print(num_chars * char)
函数的主要功能是通过不重新键入/复制粘贴它们来以非常类似的方式使用大量代码块来节省时间。但是当你做出改变时,它们也可以节省时间。如果您在10个不同的地方使用相同的功能,您仍然只需更改一次即可更新所有10个用途,而不必手动查找所有10个并更新它们。
因此,如果您决定将标题标题放入此菜单打印部分,并且您已经在一堆地方使用它作为此功能或类似功能,那么您可以非常轻松地更新它们。
答案 2 :(得分:0)
我发现这是一个很好的规则,如果您转换为函数的代码被多次使用并占用超过3行,那么它就是一个被转换成函数的候选者。如果它是一个非常复杂的单行代码(如此x = [ i**j for i in z for j in y ]
)并且使用了两次以上,它可能是变成函数的候选者。
在绘制线条时可能是一个偏好的问题,但基本的想法是,如果它使您的代码更容易阅读或更容易编写,将某些内容转换为函数可能是一个好主意。如果它使你的代码更难阅读(因为每次你看到函数你必须回顾它的作用的具体细节),你可能不应该将该代码转换为函数。