熟练运用函数是使用Python进行编程的重要技能。在开发程序时,如果某部分代码所实现的功能需要被多次使用,为了提高编写的效率以及代码的简洁性,就可以把具有独立功能的代码组织为一个小模块,这就是函数。在使用这个功能时,只需要通过函数名(加参数)来调用它就可以了。
1.定义函数
函数按如下方式定义。
def 函数名(参数):
描述函数功能的代码
另一行描述函数功能的代码
注意函数名称由字母、下划线和数字组成,且数字不能用在开头。Python推荐函数名称使用小写字母,可以用下划线分隔单词以增加名称的可读性。
这里有一个重要的提示。在定义函数时描述函数功能的代码需要缩进四个空格,这在Python中是一个固定的模式,即所有同一层次的语句必须包含相同的缩进空格数量。例如,上述两行描述函数功能的语句属于同一层次,所以都要缩进四个空格。对于熟悉其他编程语言的人来说,这是尤其需要注意的一个不同之处。在Python中,缩进包含了严格的语法规则和逻辑性,缩进错误会导致代码执行错误。在其他代码块中,例如,一个循环语句,同样要坚持这样的缩进方式,如果有代码块的嵌套,则需要在上一个层次缩进的基础上进一步再缩进四个空格,读者可以在学习本教材后续的应用案例的过程中慢慢熟悉这样的代码书写方式。使用Spyder编写代码时,编辑器会自动根据Python的语法规则进行缩进,所以很多时候不需手动缩进,但这不是万无一失的。请阅读下述代码,熟悉Python的这种表述方式。
if True:
print("Hello Python!")
else:
print("Hello World!")
上述缩进也可采用按一次“Tab”键完成。在“编程界”一直存在“空格派”和“Tab派”两个派别,他们对于采用什么按键进行缩进各执一词,但是初学者不需要过度关注这样的细节问题,只要知道两种缩进方式都是可以使用的就可以了。
2.调用函数
函数定义完成之后,相当于有了一个具有某些功能的代码组合,想要使用这个功能的时候就可以很方便地调用它了。调用函数的方式很简单,使用命令:“函数名(参数)”即可完成调用。
请尝试下面的示例来熟悉这种操作。
#定义一个函数,能够完成打印信息的功能
def print_info():
print('------')
print('人生苦短,我用Python')
print('------')
#定义完函数后,函数是不会自动执行的,需要调用它才可以
#调用函数
print_info()
在上面的练习中,出现了一个编写代码时常用的方法,就是通过“#注释内容”来对代码所实现的功能进行注释。“#”之后的内容,Python认为是关于代码含义的注释内容,在执行的过程中会被自动忽略。养成良好的注释习惯,对于编写程序是一个很重要的事情,因为这会极大地增加程序的可读性。
3.函数参数
考虑这样一个问题:定义一个函数,使得每次输入两个数后,这个函数能够完成这两个数的加法运算并且把结果打印出来,该怎样设计?
一个好的设计方式是利用函数的参数。为了让函数更通用,即令它可以计算任意给定的两个数的和,需要在定义函数的时候,让它能够接收需要求和的两个数的值,函数中用来接收这两个数的量就是函数的参数。定义好带有参数的函数后,在调用时就可以使用这些参数了,请看下面的例子。
(1)定义带有参数的函数
下面的例子中定义了包含两个参数的函数。
#定义函数
def add_2_num(a,b):
c=a+b
print('%d+%d=%d'%(a,b,c))
调用函数:
num1=int(input('请输入一个数:'))
num2=int(input('请再输入一个数:'))
add_2_num(num1,num2)
输出结果:
请输入一个数:1
请再输入一个数:2
1+2=3
在上述例子中,出现了“%”这样的符号,它在Python中叫作占位符,用于字符串格式化。在这里,它的含义是,当得到“a,b,c”的值之后,在相应的位置把数值显示出来。Python中还有其他处理占位符的方式,可以通过实践进行探索。“input( )”是Python中可以直接使用的函数,它用来接收一个输入数据,在3.X版本中返回的是字符串类型的数据,所以使用“int”把它转换成整数型数值后再进行计算。
(2)调用带有参数的函数
def add_2_num(a,b):
c=a+b
print(c)
add_2_num(100,200)#调用带有参数的函数时,需要在小括号中传递数据
定义函数时,小括号中的参数是用来接收参数的,被称为“形参”;调用函数时,小括号中的数是用来传递参数值给函数的,被称为“实参”。在(1)中,除了定义函数,也实现了对带有参数的函数的调用,通过输入num1和num2的值,并且在调用时把这个值传递给函数的参数,函数就可以执行并输出结果了。
(3)缺省参数
在定义函数时可以设定缺省参数。当调用函数时,如果缺省参数的值没有通过调用传递给函数,则相应的参数值就被取为默认值。如下例所示,其中“age”是缺省参数,如果age没有被赋值,则会打印它的默认值(18);如果对它进行赋值,则会按给定的值打印结果。
def print_info(name,age=18):
#打印任何传入的字符串
print("name:%s"%name)
print("age:%d"%age)
#调用printinfo函数
print_info(name="花花")
print_info(age=20,name="花花")
打印结果:
name:花花
age:18
name:花花
age:20
设定缺省参数的时候需要注意,带有默认值的参数一定要位于函数所有参数的最后。
4.函数返回值
(1)返回值
所谓返回值,就是程序中函数完成它应该做的事情后,给予调用者的结果。例如,定义了一个函数用于获取室内温度,当该函数完成获取室内温度的任务后,只有返回这个温度,调用者才能使用这个返回值做后续的工作。
(2)带有返回值的参数
想要在函数中把结果返回给调用者,需要在函数中使用“return”语句。可以参考下面的示例,这个函数会把“c”作为返回值。
def add_2_nums(a,b):
c=a+b
return c
(3)保存函数返回值
当函数返回一个数据后,如果接下来想反复使用这个数据,就需要以某种方式把它保存下来,保存函数返回值的示例如下。
#定义函数
def add_2_nums(a,b):
return a+b
#调用函数,并保存函数的返回值
result=add_2_num(1,2)
#因为result已经保存了add_2_num的返回值,所以下面可以直接使用它
print(result)
该例输出结果是:
3