文章目录
- 函数
- 什么是函数
- 为什么学习函数
- 函数定义
- 函数的传入参数
- 函数的返回值
- 返回值基础
- None返回值
- 函数说明文档
- 函数的嵌套调用
- 定义
- 代码示例
- 全局变量和局部变量
- 全局变量
- global变量
- 局部变量
- 函数综合案例
函数
什么是函数
- 组织好的,可重复使用的、用来实现特定功能的代码段
为什么学习函数
-
为了得到一个针对特定需求,可供重复利用的代码段
-
提高程序利用性,减少重复代码,提高开发效率
函数定义
- 函数定义语法
def 函数名(传入参数):函数体return 返回值
- 函数调用语法
函数名(参数列表)
-
注意事项
-
参数不需要可以省略
-
返回值不需要可以省略
-
函数必须先定义后使用
-
函数的传入参数
-
功能描述:在函数进行计算时,接收外部提供的数据
-
代码示例
def add(a, b):return a + bprint(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 Noneret = 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 = 20print(f"函数体内访问:num = {num}")func_b()
print(f"函数体外访问:num = {num}")
- 运行结果
global变量
-
引入:可以看到上面的全局变量中,将num改为20,在函数内生效了,但是出了函数后,num的值又变成了10
-
global关键字,可以在函数体内部声明局部变量为全局变量
-
代码示例
num1 = 10def func_c():global num1num1 = 20print(f"函数体内访问:num1 = {num1}")func_c()
print(f"函数体外访问:num1 = {num1}")
- 运行结果
局部变量
-
定义在函数体内部的变量,只在函数体内生效
-
作用:在函数体内部,临时保存数据,当函数调用完后,则销毁局部变量
-
代码示例
def func_a():a = 10print(f"函数体内:a={a}")func_a()
# NameError: name 'a' is not defined
# print("函数体外:{}", a)
函数综合案例
- 需求描述
- 代码示例
# *_*coding:utf-8 *_*money = 1000
name = Nonename = 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 moneymoney += numprint("------存款--------")print(f"存款{num}元成功")print(f"{name}您的余额还有{money}元")def load_monry(num):global moneymoney -= numprint("------取款--------")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("即将退出...")returnmain()