什么时候应该使用函数?

时间:2018-06-13 10:46:41

标签: python python-3.x python-2.7 python-3.6

我想知道什么时候应该使用函数,因为我看到很多人都在继续编写代码而不是解析参数并返回结果。

我的意思是这些功能:

def foo():
   print("How are you?")

print("Hi.")
foo()

(这段代码是无意义且不实用的。这只是一个例子。)

为什么我们应该使用函数而不是仅仅将代码放在一个连续的位置?

1 个答案:

答案 0 :(得分:4)

什么更容易阅读和维护?

版本1:

db = init_database()
connect_to_database(db)
target = 'funny_cats'
cats = db.fetch(target)

第2版:

5000 lines of code resembling the bodies of the above function calls

什么更容易阅读和维护?

版本1:

for user in lots_of_users:
    if not polite(user):
        ban(user)

第2版:

for user in lots_of_users:
    30 lines of code for body of polite
    30 lines of code for body of ban

请考虑您要在程序的不同位置执行相同的代码。

some_function()
[100 lines]
some_function()
[100 lines]
[conditional branch possibly calling some_function()]

使用某个功能,您只需在所需位置调用该功能即可。没有函数,您需要在任何地方复制代码。如果要更改这些代码块的行为,则必须查找复制代码的所有位置,而不是仅调整一个函数。如果您错过了一个位置,则会引入错误。

函数是Python中的第一类对象,因为它们的行为与任何其他更琐碎的对象一样 - 这可以将它们放在列表中,或者将它们用作其他函数的参数。

这允许您将函数视为可以由其他代码段动态执行的自包含代码片段,例如通过将排序标准传递给内置的sorted函数。

>>> def criterion(sequence):
...     return sequence[-1]
... 
>>> list_of_sequences = [(1, 2), (5, -1), (2, 10)]
>>> 
>>> sorted(list_of_sequences, key=criterion)
[(5, -1), (1, 2), (2, 10)]