一、什么是函数
函数是最基本的一种代码抽象的方式,是组织好的可重复使用的用来实现单一或相关联功能的代码段。
函数是对做相似的事情或相似的动作进行封装,它能提高应用的模块性和代码的重复利用率。我们要封装好一个函数,首先要学会对事务进行抽象,抽象是数学中非常常见的概念。
举个例子:
计算阶乘,比如:1 *2 * 3 * ... * 10,写起来十分不方便,我们为了简便可以写成10!。再如求和公式
等同于1 + 2 + 3 + ... + 100;
抽象非常强大,借助抽象,我们不用关心底层的具体计算过程,而直接在更高的层次上思考问题。
写计算机程序也是一样,函数就是最基本的一种代码抽象的方式。
Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用,如 print() 能输出任何对象,len()能计算不同类型对象的长度。
二、函数的定义
定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
定义函数格式:
def 函数名(参数1,参数2,....):
函数体
return 返回值
示例:
# 定义一个函数,接收两个参数,返回其最大值
def max(a, b):
if a >= b:
return a # 返回a
else:
return b # 返回b
注意:函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。
示例2 :
def quadratic_equation(a, b, c):
import math
t = math.sqrt(b * b - 4 * a * c)
v1=(-b + t) / (2 * a)
v2=(-b - t) / (2 * a)
return v1, v2
print(quadratic_equation(10, -5, 0))
print(quadratic_equation(1, -12, 6))
注意:函数可以返回多个字,返回值为单个元组
三、函数调用
Python内置了很多有用的函数,我们可以直接调用。
要调用一个函数,需要知道函数的名称和参数,比如求长度函数len(),它接收一个参数。
调用内部函数len()示例:
lenght=len('abcdefj') # 使用变量接收函数返回值
print(lenght) # 结果 7
len([1, 2, 3, 4], 'abc') # 函数的参数类型或者参数数量不正确会抛出 TypeError 错误
注意:调用函数式我们传入的参数数量或者类型不正确会抛出 TypeError 错误
调用外部函数示例:
def max(a, b):
if a >= b:
return a # 返回a
else:
return b # 返回b
c = max(4, 5) # 调用max函数
print(c) # 打印结果5
print(max('A', 'a')).
四、Python带默认参数的函数
定义函数时我们可以给参数传递默认值,当调用函数时没有传递该参数值时使用默认参数值。
带默认值的参数称为默认参数,而无默认值的参数为必需参数,调用函数时必需参数必填,默认参数选填。
示例1:
def power(x, n=2): # n有默认值
return x ** n
print(power(5)) # 调用函数不传递n的值,使用默认值,结果为25
print(power(3, 3)) # 调用函数传递n的值,使用传递值,结果为27
注意:由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面。
示例2:
带多个默认参数函数的调用,注意最后
def per_info(name, sex='男', age=32):
print(name, sex, age)
per_info('woodman')
per_info('Helen', '女')
per_info('Bobo', age=28) # 是用后面的默认参数,需要给出参数名
per_info(age=28, sex='女', name='Baby') # 使用参数名传递参数,对参数位置没要求
tuple = ('Peter', '男', 45)
per_info(*tuple) # 要将列表或元组中值当参数传入函数,我们可在前面加上*
注意:第5行Bobo的代码,sex参数使用默认值,我们需要传递age参数时需要指定参数名;
第6行Baby代码,我们可以给所有传递参数带上参数名称,带上参数名称后对参数可以在任意位置;
最后1行,在元组前加‘*’,表示将列表或元组中值当参数传入函数,注意参数的循序和个数
输出结果:
woodman 男 32
Helen 女 32
Bobo 男 28
Heli 女 28
Peter 男 45