python 函数

在看完《我的python世界-玩我的世界学python》后,开始阅读《python从入门到实践》,为什么要看这本书呢,因为我当时通过百度进行查询:python书籍推荐的时候,许多的人都推荐了这本书,所以我就拿来看一下,目前看到了第八章-函数部分,感觉这本书讲的非常的细,并且绝大部分的章节都配上了例子,并且后面跟上“动手一试”感觉挺不错的,很适合初学者入门。
然后切入正题,函数这个东西相信都不陌生,但是为什么要有函数这个东西呢?
我认为有以下三点:

  • 快捷!
  • 易于操作!
  • 方便!

其实我觉得函数就是为了给程序员提供方便的,假如说没有了函数,那么我们写一些本来只需要调用函数的代码时,还要把本来定义该函数的那些给抄过来然后再使用,而你有了函数,那么直接使用别人定义好的就行了。
下面说个例子:
需要打印的设计存储在一个列表中,打印后移到另一个列表中。下面是在不使用函数的情况下模拟这个过程的代码:

首先创建一个列表,其中包含一些要打印的设计

unprinted_designs = [‘iphone case’, ‘robot pendant’, ‘dodecahedron’]

completed_models = []

模拟打印每个设计,直到没有未打印的设计为止

打印每个设计后,都将其移到列表completed_models中

while unprinted_designs:

current_design = unprinted_designs.pop()

#模拟根据设计制作3D打印模型的过程

print(“Printing model: “ + current_design)

completed_models.append(current_design)

显示打印好的所有模型

print(“ The following models have been printed:”)

for completed_model in completed_models:

print(completed_model)

这个程序首先创建一个需要打印的设计列表,还创建一个名为completed_models的空列表,每个设计打印都将移到这个列表中。只要列表unprinted_designs中还有设计,while循环就模拟打印设计的过程:从该列表末尾删除一个设计,将其存储到变量current_design中,并显示一条消息,指出正在打印当前的设计,再将该设计加入到列表completed_models中。
看起来非常麻烦,那么我们重新设计一下代码,给他改成函数看一下:

def print_models(unprinted_designs, completed_models):

“”” 模拟打印每个设计,直到没有未打印的设计为止 打印每个设计后,都将其移到列表completed_models中 “””

while unprinted_designs:

current_design = unprinted_designs.pop()

模拟根据设计制作3D打印模型的过程

print(“Printing model: “ + current_design)

completed_models.append(current_design)

def show_completed_models(completed_models):

“””显示打印好的所有模型”””

print(“ The following models have been printed:”)

for completed_model in completed_models:

print(completed_model)

unprinted_designs = [‘iphone case’, ‘robot pendant’, ‘dodecahedron’]

completed_models = []

print_models(unprinted_designs, completed_models)

show_completed_models(completed_models)

这个程序的输出与未使用函数的版本相同,但组织更为有序。完成大部分工作的代码都移到 了两个函数中,让主程序更容易理解。只要看看主程序,你就知道这个程序的功能容易看清得多:

unprinted_designs = [‘iphone case’, ‘robot pendant’, ‘dodecahedron’]

completed_models = []

print_models(unprinted_designs, completed_models)

show_completed_models(completed_models)

我们创建了一个未打印的设计列表,还创建了一个空列表,用于存储打印好的模型。接下来, 由于我们已经定义了两个函数,因此只需调用它们并传入正确的实参即可。我们调用 print_models()并向它传递两个列表;像预期的一样,print_models()模拟打印设计的过程。接 下来,我们调用show_completed_models(),并将打印好的模型列表传递给它,让其能够指出打印 了哪些模型。描述性的函数名让别人阅读这些代码时也能明白,虽然其中没有任何注释。 相比于没有使用函数的版本,这个程序更容易扩展和维护。如果以后需要打印其他设计, 只需再次调用print_models()即可。如果我们发现需要对打印代码进行修改,只需修改这些代码 一次,就能影响所有调用该函数的地方;与必须分别修改程序的多个地方相比,这种修改的效 率更高。

这个程序还演示了这样一种理念,即每个函数都应只负责一项具体的工作。第一个函数打印 每个设计,而第二个显示打印好的模型;这优于使用一个函数来完成两项工作。编写函数时,如 果你发现它执行的任务太多,请尝试将这些代码划分到两个函数中。别忘了,总是可以在一个函 数中调用另一个函数,这有助于将复杂的任务划分成一系列的步骤。
是吧,虽然可能在定义的时候麻烦了一些,但是说你以后还需要进行此操作的时候,直接调用该函数就行了,而不是把之前的代码复制一遍,然后修改里面的内容。函数就是用来偷懒的!

程序员的目标之一是,编写简单的代码来完成任务,而函数有助于你实现这样的目标。它们让你编写好代码块并确定其能够正确运行后,就可置之不理。确定函数能够正确地完成其工作后,你就可以接着投身于下一个编码任务。函数让你编写代码一次后,想重用它们多少次就重用多少次。需要运行函数中的代码时,只需编写一行函数调用代码,就可让函数完成其工作。需要修改函数的行为时,只需修改一个代码块,而所做的修改将影响调用这个函数的每个地方。
使用函数让程序更容易阅读,而良好的函数名概述了程序各个部分的作用。相对于阅读一系列的代码块,阅读一系列函数调用让你能够更快地明白程序的作用。函数还让代码更容易测试和调试。如果程序使用一系列的函数来完成其任务,而其中的每个函数都完成一项具体的工作,测试和维护起来将容易得多:你可编写分别调用每个函数的程序,并测试每个函数是否在它可能遇到的各种情形下都能正确地运行。经过这样的测试后你就能信心满满,深信你每次调用这些函数时,它们都将正确地运行。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!