什么时候需要在Python中定义一个单独的函数

时间:2015-04-27 13:42:22

标签: python function

在我的代码中,我正在打印菜单

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

并在原始代码中调用两次?

如果我需要从字典中打印漂亮的菜单,还有其他选择吗?

谢谢。

3 个答案:

答案 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 ])并且使用了两次以上,它可能是变成函数的候选者。

在绘制线条时可能是一个偏好的问题,但基本的想法是,如果它使您的代码更容易阅读或更容易编写,将某些内容转换为函数可能是一个好主意。如果它使你的代码更难阅读(因为每次你看到函数你必须回顾它的作用的具体细节),你可能不应该将该代码转换为函数。