文章目录
- 函数
- 什么是函数
- 为什么学习函数
- 函数定义
- 函数的传入参数
- 函数的返回值
- 返回值基础
- None返回值
- 函数说明文档
- 函数的嵌套调用
- 定义
- 代码示例
- 全局变量和局部变量
- 全局变量
- global变量
- 局部变量
- 函数综合案例
函数
什么是函数
- 组织好的,可重复使用的、用来实现特定功能的代码段
为什么学习函数
-
为了得到一个针对特定需求,可供重复利用的代码段
-
提高程序利用性,减少重复代码,提高开发效率
函数定义
- 函数定义语法
def 函数名(传入参数):
函数体
return 返回值
- 函数调用语法
函数名(参数列表)
-
注意事项
-
参数不需要可以省略
-
返回值不需要可以省略
-
函数必须先定义后使用
-
函数的传入参数
-
功能描述:在函数进行计算时,接收外部提供的数据
-
代码示例
def add(a, b):
return a + b
print(add(1, 1))
-
注意
-
多个参数之前使用逗号隔开
-
调用传入参数时,按照顺序传入,使用逗号分隔
-
在定义函数时的参数称为形参,在调用时传入的参数称为实参
-
函数的返回值
返回值基础
-
定义:函数在执行完成后返回给调用方的结果
-
使用关键字return来返回结果
-
函数体遇到return之后就结束,return之后的逻辑不会在执行
None返回值
-
如果函数没有使用return语句返回数据,此时python中默认返回了None值
-
None是python中一个特殊的字面量,其类型是:
-
代码示例
def sayHi():
print('hi')
result = sayHi()
print(result)
print(type(result))
-
应用场景
-
用在函数无返回值的场景
-
用在if判断上
-
None等同于False
-
一般在函数中主动返回None,配合if判断做相关处理
def checkAge(age): if age > 18: return "ok" else: return None ret = checkAge(16) if not ret: print("未满18")
-
-
用于声明无内容的变量上
-
定义变量,但暂时不需要变量有具体的值,可以用None来代替
name=None
-
函数说明文档
-
通过多行注释的方式,对函数进行解释说明,内容应写在函数体之前
-
语法
def func(x, y):
"""
函数说明
:param x: 形参x的说明
:param y: 形参y的说明
:return: 返回值说明
"""
函数体
return 返回值
函数的嵌套调用
定义
- 嵌套调用:一个函数里面又调用了另一个函数
代码示例
def func_b():
print('-------2-------')
def func_a():
print('-------1-------')
func_b()
print('-------3-------')
func_a()
-
调用流程
-
先执行调用func_a
-
在func_a中在调用func_b
-
执行完func_b的所有逻辑在返回func_a中调用func_b的位置
-
继续执行完剩余的func_a函数逻辑
-
全局变量和局部变量
- 作用域:变量的作用范围,在哪里可见,在哪里不可见
全局变量
-
在函数体内,体外都能生效的变量
-
代码示例
def func_b():
num = 20
print(f"函数体内访问:num = {num}")
func_b()
print(f"函数体外访问:num = {num}")
- 运行结果
global变量
-
引入:可以看到上面的全局变量中,将num改为20,在函数内生效了,但是出了函数后,num的值又变成了10
-
global关键字,可以在函数体内部声明局部变量为全局变量
-
代码示例
num1 = 10
def func_c():
global num1
num1 = 20
print(f"函数体内访问:num1 = {num1}")
func_c()
print(f"函数体外访问:num1 = {num1}")
- 运行结果
局部变量
-
定义在函数体内部的变量,只在函数体内生效
-
作用:在函数体内部,临时保存数据,当函数调用完后,则销毁局部变量
-
代码示例
def func_a():
a = 10
print(f"函数体内:a={a}")
func_a()
# NameError: name 'a' is not defined
# print("函数体外:{}", a)
函数综合案例
- 需求描述
- 代码示例
# *_*coding:utf-8 *_*
money = 1000
name = None
name = input("请输入姓名:")
def show_menu():
print("-------主菜单--------")
print(f"{name}您好,欢迎登录ATM机")
print("查询余额 [输入1]")
print("存款 [输入2]")
print("取款 [输入3]")
print("退出 [输入4]")
def get_balance():
print("------查询余额--------")
print(f"{name}您的余额还有{money}元")
def save_money(num):
global money
money += num
print("------存款--------")
print(f"存款{num}元成功")
print(f"{name}您的余额还有{money}元")
def load_monry(num):
global money
money -= num
print("------取款--------")
print(f"取款{num}元成功")
print(f"{name}您的余额还有{money}元")
def main():
while (True):
show_menu()
choice = int(input("请输入你的操作选项:"))
if choice == 1:
get_balance()
elif choice == 2:
num = int(input("请输入你要存的钱:"))
save_money(num)
elif choice == 3:
num = int(input("请输入你要取的钱:"))
load_monry(num)
elif choice == 4:
print("即将退出...")
return
main()