一、什么是函数
函数是最基本的一种代码抽象的方式,是组织好的可重复使用的,用来实现单一或相关联功能的代码段。
函数是对做相似的事情或相似的动作进行封装,它能提高应用的模块性和代码的重复利用率。我们要封装好一个函数,首先要学会对事务进行抽象,抽象是数学中非常常见的概念。
举个例子:
计算阶乘,比如:1 *2 * 3 * ... * 10,写起来十分不方便,我们为了简便可以写成10!。再如求和公式 ∑n=1100n 等同于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 :一元二次方程求解 ax2+bx+c=0
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(4, -5, 0))
print(quadratic_equation(1, -12, 6))
注意:函数可以返回多个值,它返回值是个元组
示例3:一元二次方程求解 ax2+bx+c=0, 需要考虑到多种情况 a=0 和 Δ=b2−4ac4a2=0
def quadratic_equation(a, b, c):
if a == 0: # a 为0时只有一个值
return -c / b
else:
import math
t = math.sqrt(b * b - 4 * a * c)
if t == 0: # △=0 时也只有一个值
return -(b / (2 * a))
else:
v1 = (-b + t) / (2 * a)
v2 = (-b - t) / (2 * a)
return v1, v2
print(quadratic_equation(0, -5, 1))
print(quadratic_equation(5, 10, 5))
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) # 要将列表或元组中值当参数传入函数,我们可在前面加上*
注意:第6行Bobo的代码, sex参数使用默认值,我们需要传递age参数时需要指定参数名;
第7行Baby代码,我们可以给所有传递值带上参数名称,带上参数名称后对参数可以在任意位置;
最后1行,在元组前加‘*’,表示将列表或元组中值当参数传入函数,注意参数的顺序和个数.
输出结果:
woodman 男 32
Helen 女 32
Bobo 男 28
Heli 女 28
Peter 男 45
函数提高篇:Python入门 函数 提高篇