函数的一个主要目的就是将需要多次执行的代码放在一起。如果没有函数定义,你可能每次都需要复制粘贴这些代码。
一般来说,我们总是希望避免复制代码,因为如果一旦决定要更新代码(比如说,发现了一个缺陷要修复),就必须记住要修改所有复制的代码。
随着你获得更多的编程经验,常常会发现自己在为代码“消除重复”,即去除一些重复或复制的代码。消除重复能够使程序更短、更易读、更容易更新。
函数定义以def开头。
def 函数名(参数列表):
语句组
def abs(x):
return -x if x<0 else x
空函数
如果想定义一个什么都不做的函数,可以使用pass语句。
def donothing():
pass
如果为了让程序能跑起来,但暂时又不写这个函数,可以使用pass语句。这里pass用作占位符。
如果需要在一个函数内修改全局变量,就使用global 语句。如果在函数的顶部有global eggs 这样的代码,它就告诉Python,“在这个函数中,eggs 指的是全局变量,所以不要用这个名字创建一个局部变量。”例如,在文件编辑器中输入以下代码:
def spam():
global eggs
eggs = 'spam'
eggs = 'global'
spam()
print(eggs)
在Python 程序中遇到错误,或“异常”,意味着整个程序崩溃。你不希望这发生在真实世界的程序中。相反,你希望程序能检测错误,处理它们,然后继续运行。
def spam(divideBy):
return 42 / divideBy
print(spam(12))
print(spam(0))
通常,对于一个函数,你要知道的就是它的输入值(变元)和输出值。你并非总是需要加重自己的负担,弄清楚函数的代码实际是怎样工作的。如果以这种高层的方式来思考函数,通常大家会说,你将该函数看成是一个黑盒。
这个思想是现代编程的基础。
一些模块中的函数是由其他人编写的。尽管你在好奇的时候也可以看一看源代码,但为了能使用它们,你并不需要知道它们是如何工作的。而且,因为鼓励在编写函数时不使用全局变量,你通常也不必担心函数的代码会与程序的其他部分发生交叉影响。
错误可以由try 和except 语句来处理。那些可能出错的语句被放在try 子句中。如果错误发生,程序执行就转到接下来的except 子句开始处。
def spam(divideBy):
try:
return 42 / divideBy
except ZeroDivisionError:
print('Error: Invalid argument.')
print(spam(2))
print(spam(0))
函数是将代码逻辑分组的主要方式。因为函数中的变量存在于它们自己的局部作用域内,所以一个函数中的代码不能直接影响其他函数中变量的值。这限制了哪些代码才能改变变量的值,对于调试代码是很有帮助的。
函数是很好的工具,帮助你组织代码。你可以认为他们是黑盒。它们以参数的Python 编程快速上手——让繁琐工作自动化形式接收输入,以返回值的形式产生输出。它们内部的代码不会影响其他函数中的变量。
方法也是函数,它们与特定数据类型的值绑定。
函数是带名字的代码块,用于完成具体的工作。
要执行函数定义的特定任务,可调用该函数。需要在程序中多次执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用执行该任务的函数,让Python运行其中的代码。你将发现,通过使用函数,程序的编写、阅读、测试和修复都将更容易。
函数是将代码逻辑分组的主要方式。因为函数中的变量存在于它们自己的局部作用域内,所以一个函数中的代码不能直接影响其他函数中变量的值。这限制了哪些代码才能改变变量的值,对于调试代码是很有帮助的。
函数是很好的工具,帮助你组织代码。你可以认为他们是黑盒。它们以参数的形式接收输入,以返回值的形式产生输出。它们内部的代码不会影响其他函数中的变量。