定义函数
函数不会改变某一个功能的代码, 函数只是将这个功能的代码封装起来, 方便后续调用.
# 基本结构
def 函数名(参数):
'''文档注释, 函数功能的描述'''
代码块
# 需要注意的是函数定义阶段, 只检测语法, 不执行代码
def max_2():
'''给定两个数, 打印较大的数'''
x = 10
y = 20
if x > y:
print(x)
else:
print(y)
# 函数名.__doc__方法可查看函数的文档注释
print(max_2.__doc__) # 给定两个数, 打印较大的数
定义函数的三种形式
空函数
def func():
pass
有参函数
def max_2(x, y):
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
无参函数
def max_2():
'''给定两个数, 打印较大的数'''
x = 10
y = 20
if x > y:
print(x)
else:
print(y)
函数的调用
def max_2(x, y):
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
# 使用函数名加括号即可调用函数
# 有参函数调用时必须传入相应数量的参数
max_2(20, 10) # 20
函数的返回值
def max_2(x, y):
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
retur = max_2(20, 10)
print(retur) # None
# 注意, 原函数只进行了结果打印, 函数本身并未返回任何值, 因此我们打印retur结果为None
def max_2(x, y):
'''打印和返回较大的数'''
if x > y:
print(x)
return x
else:
print(y)
return y
retur = max_2(20, 10)
print(retur) # 20
# 我们将原函数进行简单的改造, 加入return, 现在我们打印retur会显示函数的返回值
# return有如下几个特性:
# 1. return可以返回一个个值, 没有返回值则返回None
# 2. 没有return则返回None
# 3. return会终止函数, 不会运行下面的代码
# 4. return可以返回多个值(通过逗号隔开), 返回值以元祖的形式接受
函数的参数
形参 (parameter)
函数定义阶段时括号内设置的参数, 相当于一个变量名, 可以接收被传入的值
实参(argument)
实参是在函数调用阶段传给函数(形参)的一个具体的值, 相当于变量值, 可以为所有数据类型
# 函数定义
def max_2(x, y): # x, y 即为形参
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
# 函数调用
max_2(10, 20) # 10, 20 即为实参
位置形参与位置实参
当函数定义阶段时设置了多个形参时, 则调用函数时也必须依次传入对应数量的实参, 我们把按照从左到右的排列, 一一对应的形参和实参称为位置形参和位置实参
# 函数定义
def max_2(x, y): # x, y 即为位置形参
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
# 函数调用
max_2(10, 20) # 10, 20 即为位置实参
默认形参
默认形参既在函数定义阶段就已经给形参设定了一个默认值
def max_2(x, y = 10): # y 即为默认形参, 默认形参必须在位置形参的后面
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
# 函数调用阶段仍能给默认形参传值, 如果没有给默认形参传值,即为默认值
max_2(20) # y = 10
max_2(20, 30) # y = 30
关键字实参
关键字实参即为在函数调用阶段, 按照形参名(关键字)给形参传值
def max_2(x, y):
'''打印较大的数'''
if x > y:
print(x)
else:
print(y)
# 函数调用
max_2(y=10, x=20)
max_2(10, y=20) # 关键字实参必须在位置实参的后面, 否则会报错
max_2(10, x=20) # 报错,x被多次赋值