函数是一段事先组织好可重复使用的代码块,用于执行特定的任务。函数可以接受输入参数,并返回一个结果,从而提高应用的模块性和代码的重复利用率。先前我们已经介绍了Python中的内置函数,现在我们要学习创建自定义函数,在定义函数时需要用到关键字def。具体的语法规则如下:
下面我以奇偶分类器为例,讲解函数的构成和用法。
def classify(num):
odd = []
even = []
for i in num:
if i % 2:
odd.append(i)
else:
even.append(i)
return odd, even
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(classify(lst))
([1, 3, 5, 7, 9], [2, 4, 6, 8])
首先以def作为开头,为了直观看出函数的作用,我们一般将函数用途作为名称,(num)是传入函数体一个叫做num的参数;之后我们创建了两个列表命名为odd和even,接下来是一个for循环,读取num中的每一个值,如果除以2余1,那就是奇数,添加进odd列表中,反之则加入even列表;最后是return返回了odd和even两个列表。
那我们怎样调用这个函数呢,其实很简单,我们创建了一个列表lst,作为序列数据类型,它符合classify对每个元素分类的要求,我们只需要像函数创建那样,将函数体后面的形式参数换成我们创建的具有实际数据的列表lst,之后打印结果就可以了。这里我们再补充一个形式参数和实际参数的概念:
形式参数是在函数定义时声明的变量,它用于接收调用函数时传递的实际参数。
实际参数是在调用函数时传递给函数的值。实际参数可以是常量、变量、表达式或其他函数调用的结果。
另外我们在函数定义时可以给参数赋初值,称为默认形参。默认参数可以有多个,但是默认参数后不能再出现无初值的非默认参数。由于默认参数的存在,我们在传递参数时也可以有多种方法。
def calc(a, b = 5):
c = a + b
return c
result1 = calc(2, 3)
result2 = calc(10)
result3 = calc(b = 2, a = 4)
print(result1)
print(result2)
print(result3)
5
15
6
第一种就是最常用的依次赋值,实际参数会按照先后顺序依次赋值给形式参数,这里的实际参数称为必需参数,调用时要保证顺序和数量正确;第二种则是缺省参数,实际参数传给第一个形式参数,其他的则按照形式参数的默认值参与计算;第三种是主动赋值,又叫关键字参数,将形式参数和实际参数用赋值运算符连接,这样做的好处是赋值可以不同于函数声明时的参数顺序。
当我们不确定输入参数的个数时,可以使用不定长参数,它的定义方式是星号*加参数名。
def lst_append(parameter1, *parameters):
a = [10, 20, 30]
b = ['a', 'b', 'c']
a.append(parameter1)
b.append(parameters)
print(a)
print(b)
lst_append(40, 'd', 'e')
?需要注意不定长参数会以元组的形式存放对应的实际参数。
[10, 20, 30, 40]
['a', 'b', 'c', ('d', 'e')]
今天我们介绍的只是函数的初级用法,作为Python的重要组成部分,它会在今后的学习过程中多次出现。不过伴随着学习的深入,我们终有一天可以揭下它的神秘面纱。祝大家在学习Python的道路上披荆斩棘,不遇bug。