函数
- 函数的作用
- 函数的使用步骤
- 函数的参数作用
- 函数的返回值作用
- 函数的说明文档
- 函数嵌套
1 函数的作用
需求: 用户到ATM机取钱
-
输入密码后显示”选择功能"界面
-
查询余额后显示”选择功能"界面
-
取2000钱后显示"选择功能"界面
特点: 显示“选择功能”界面需要重复输出给用户,怎么实现?
函数就是将一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求。
函数在开发过程中,可以更高效的实现代码重用。
2 函数的使用步骤
在代码中我们需要先定义函数然后才能实现调用函数
2.1 定义函数
def 函数名(参数):
代码1
代码2
......
2.2 调用函数
函数名
注意:
- 不同的需求,参数可有可无
- 在 python 中,函数必须先定义后使用
2.3 函数体验
需求:实现 ATM 取钱功能
1 搭建整体框架(复现需求)
print('密码正确登录成功')
# 显示"选择功能"界面
print('查询余额完毕')
# 显示"选择功能"界面
print('取了 2000 元')
# 显示"选择功能"界面
2 确定"选择功能"界面内容
print('查询余额')
print('存款')
print('取款')
3 封装"选择功能"
注意:一定是先定义函数,后调用函数
代码如下:
# 1 搭建整体框架
'''
1、输入密码登录后显示所有功能
2、查询余额后显示所有功能
3、取完钱以后显示所有功能
'''
# 2 功能页面
'''
显示余额、存款、取款
'''
# 编写 select 函数,因为函数需要先定义在调用,所有函数需要写到所有代码的最上面
def select():
print('查询余额')
print('存款')
print('取款')
print('密码正确登录成功')
# 显示"选择功能"界面,调用 function
select()
print('查询余额完毕')
# 显示"选择功能"界面,调用 function
select()
print('取了 2000 元')
# 显示"选择功能"界面,调用 function
select()
注意:
在上面的代码中 select 函数,直接将需要复用的代码写入,然后再后续的代码块中需要使用到 select 函数即可
[10:49:16 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
密码正确登录成功
查询余额
存款
取款
查询余额完毕
查询余额
存款
取款
取了 2000 元
查询余额
存款
取款
2.1 定义函数
def 函数名(参数)
代码1
代码2
......
2.2 调用函数
函数名称(参数)
注意:
- 不同的需求,参数可有可无
- 再 python 中,函数必须先定义后使用
'''
1.使用函数
2.测试注意事项
需求:
创建一个函数,实现 print(hello world)
'''
# 定义函数
def info_print():
print('hello world')
# 调用函数
info_print()
[11:09:50 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
hello world
总结:
- 函数先定义后调用,如果先调用会报错
- 如果没有调用定义的函数,函数里面的代码不会执行
- 函数执行流程
- 当调用函数的时候,解释器回到定义函数的地方去执行下方缩进的代码,当这些代码执行完毕,回到调用函数的地方继续向下执行
- 定义函数的时候,函数体内部缩进的代码并没有执行
3 函数参数的作用
思考: 完成需求如下
一个函数完成两个数1和2的加法运算,如何书写程序?
def add_num1():
# 内置定义变量 result
result = 1+2
print(result)
# 调用 add_num1 函数
add_num1()
思考: 上述 add num1函数只能完成数字1和2的加法运算,如果想要这个函数变得更灵活,可以计算任何用户指定的两个数字的和,如何书写程序?
参数的作用就是让函数变得更加灵活
分析: 用户要在调用函数的时候指定具体数字,那么在定义函数的时候就需要接收用户指定的数字。函数调用时候指定的数字和定义函数时候接收的数字即是函数的参数。
# 这里定义 a,b 变量用来接收在调用的时候传入的值,对于函数中接收的变量参数如 a,b 叫做形参
def add_num1(a,b):
# 内置定义变量 result
result = a+b
print(result)
# 调用 add_num1 ,并且给 a,b 变量传入 10,20,对于给函数传递的变量参数如 10,20 叫做实参
add_num1(10,20)
# 报错,定义函数时定义了两个变量,而传递一个则会报错
# add_num1(10)
[09:47:54 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
30
总结:
- 调用函数的变量参数叫做实参。
- 接收函数的变量参数叫做形参。
4 函数返回值的作用
例如:我们去超市购物,比如买烟,给钱之后,是不是售货员会返回给我们烟这个商品,在函数中,如
果需要返回结果给用户需要使用函数返回值。
# 定义 buy 函数返回烟,
def buy():
return '烟'
# 将 buy 函数返回值,赋值给 goods
goods = buy()
print(goods)
# 直接输出 buy 函数的返回值
print(buy())
[09:49:05 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
烟
烟
并且当 return 之后就直接退出 buy 函数,如下代码,print("hahhaha")
可以看到代码块并非高亮
# 输出也不会有 hahaha
[10:45:38 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
烟
烟
return 作用:
- 负责函数返回值
- 退出当前函数:导致 return 下方函数体内部的所有代码不再执行
4.1 应用
需求: 制作一个计算器,计算任意两数字之和,并保存结果
def sum_num(a,b):
return a+b
# 直接引用 sum_num 函数,并传入 1,2 两个值
print(sum_num(1,2))
# 将返回值赋值给 result
result = sum_num(2,2)
print(result)
[09:16:05 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
3
4
5 函数说明文档
思考:定义一个函数后,程序员如何书写程序能够快速提示这个函数的作用?
答:注释
思考:如果代码多,我们是不是需要在很多代码中找到这个函数定义的位置才能看到注释? 如果想更方便的查看函数的作用怎么办?
答:函数的说明文档
函数的说明文档也叫函数的文档说明
# help 函数作用:查看函数的说明文档用的(函数的解释说明信息)
# 这里查看 len 函数的说明信息
help(len)
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
5.1 语法
- 定义函数的说明文档
# 说明文档只能在函数下的第一行写入的内容才叫做说明文档
def 函数名(参数):
"""说明文档的位置"""
代码
......
- 查看函数的说明文档
help(函数)
5.2 体验
- 函数文档的初级使用
def sum_num(a,b):
# 编写说明文档
"""求和函数"""
return a+b
# 通过 help 输出 sum_num 函数的说明文档
help(sum_num)
可以在下面看到对应的输出
Help on function sum_num in module __main__:
sum_num(a, b)
求和函数
(END)
- 函数文档的高级使用
# 函数的说明文档高级使用
def sum_num(a,b):
# 在 """ 中可以换行编写
"""
求和函数 sum_num()
a 参数 1
b 参数 2
return 返回
"""
return a+b
help(sum_num)
Help on function sum_num in module __main__:
sum_num(a, b)
求和函数 sum_num()
a 参数 1
b 参数 2
return 返回
6 函数嵌套调用
一个函数里面又调用了另外一个函数所谓函数嵌套调用指的是
- 示例
# 定义 testB 函数
def testB():
print("test b start")
print("test b 函数代码执行")
print("test b end")
# 定义 testA 函数并调用 testB
def testA():
print("test a start")
# 调用 testB
testB()
print("test a end")
# 执行 testA 函数
testA()
[10:53:20 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
test a start
test b start
test b 函数代码执行
test b end
test a end
6.1 打印图形
- 打印一条横线
def print_line():
print('_'*20)
print_line()
[10:53:30 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
____________________
- 打印多条横线
# 用户输入打印横数
nums = input("请输入:")
# 打印一条
def print_line():
print('_'*20)
# 执行 print_liens 函数并传入用户输入的 nums 变量
def print_liens(num):
i = 0
# 通过 for range 循环用户的 num 数量
for i in range(num) :
# 每次循环调用 print_lien() 函数,并且每次 i++ 用于退出循环
print_line()
i+=1
# 调用并将 nums 转为 int 类型,因为 input 默认为 str 类型
print_liens(int(nums))
[11:07:56 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
请输入:3
____________________
____________________
____________________
6.2 函数计算
- 求三个数之和
# 编写 sum_num 函数,并接收三个形参
def sum_num(a,b,c):
# 返回 a+b+c
return a+b+c
# 调用 sum_num 函数,并传入 1,3,5 三个实参
print(sum_num(1,3,5))
[11:08:15 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
9
2.求三数之和的平均值
# 编写 sum_num 函数,并接收三个形参
def sum_num(a,b,c):
# 返回 (a+b+c) / 3 ,由于这里涉及到计算的优先级所以需要将 a,b,c 括起来
return (a+b+c) / 3
# 调用 sum_num 函数,并传入 1,3,5 三个实参
print(sum_num(1,3,5))
3.函数调用实现
def sum_num(a,b,c):
return a+b+c
def ave_num(a,b,c):
# 将获取的 a,b,c 传递给 sum_num,并得到返回值 sum
sum = sum_num(a,b,c)
# 返回 sum / 3
return sum / 3
# 传递 1,2,3 给 ave_num 函数
result = ave_num(1,2,3)
print(result)
[15:04:26 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
2.0
7 总结
函数的作用:封装代码,高效的代码重用
函数使用步骤
-
定义函数:
def 函数名(): 代码1 代码2 ......
-
调用函数
函数名()
-
函数的参数: 函数调用的时候可以传入真实数据,增大函数的使用的灵活性
- 形参: 函数定义时书写的参数(非真实数据)
- 实参:函数调用时书写的参数(真是数据)
-
函数的返回值
-
作用:函数调用后,返回需要的计算结果
-
写法:
return 表达式
-
-
函数的说明文档
- 作用:保存函数解释说明的信息
- 写法
def 函数名(): """函数说明文档"""
-
函数嵌套:一个函数内部嵌套并调用另一个函数