Python系列课(4)——函数
·
目录
一、函数介绍
函数:组织好的、可重复使用的、用来实现特定功能的代码段。
# 已有函数示例
print(len("hello")) # 5(len是内置函数)
print(str(100)) # 100(str是内置函数)
快速体验:手动实现len()功能
# 自定义函数,计算字符串长度
def my_len(s):
count = 0
for char in s:
count += 1
return count
print(my_len("hello")) # 5
print(my_len("itheima")) # 7
函数的作用:
-
提高代码复用性
-
减少重复代码
-
提高开发效率
二、函数的定义
语法:
def 函数名(参数): 函数体 return 返回值
# 示例1:定义简单的函数
def say_hello():
print("Hello, Python!")
# 调用函数
say_hello() # Hello, Python!
# 示例2:函数必须先定义后使用
# say_goodbye() # 报错!函数未定义
def say_goodbye():
print("Goodbye!")
say_goodbye() # Goodbye!
练习:自动查核酸
def check_nucleic():
print("请出示健康码")
print("请测量体温")
print("请出示核酸证明")
check_nucleic()
# 输出:
# 请出示健康码
# 请测量体温
# 请出示核酸证明
三、函数的参数
作用:接受外部传入的数据
# 示例1:两数相加(有参数)
def add(x, y): # x和y是形参(形式参数)
result = x + y
print(f"{x} + {y} = {result}")
add(5, 6) # 5和6是实参(实际参数) → 5 + 6 = 11
add(10, 20) # 10 + 20 = 30
add(100, 200) # 100 + 200 = 300
# 示例2:多个参数
def info(name, age, city):
print(f"姓名:{name},年龄:{age},城市:{city}")
info("张三", 18, "北京") # 姓名:张三,年龄:18,城市:北京
info("李四", 20, "上海") # 姓名:李四,年龄:20,城市:上海
# 示例3:参数数量不限 def sum_all(a, b, c, d): return a + b + c + d print(sum_all(1, 2, 3, 4)) # 10
练习:升级版查核酸(带体温判断)
def check_temperature(temp):
print("请出示健康码")
print("请测量体温")
if temp <= 37.5:
print(f"体温{temp}度,体温正常,请进")
else:
print(f"体温{temp}度,体温异常,请隔离")
check_temperature(36.5) # 请出示健康码\n请测量体温\n体温36.5度,体温正常,请进
check_temperature(38.0) # 请出示健康码\n请测量体温\n体温38.0度,体温异常,请隔离
四、函数的返回值
返回值:函数执行完成后,返回给调用者的结果
# 示例1:返回两数之和 def add(x, y): result = x + y return result # 通过return返回结果 r = add(5, 6) print(r) # 11
# 示例2:return后的代码不执行
def test():
print("第一行")
return "结束"
print("第二行") # 这行不会执行
result = test() # 第一行
print(result) # 结束
# 示例3:返回多个值(实际是元组) def get_info(): return "张三", 18, "北京" name, age, city = get_info() print(name) # 张三 print(age) # 18 print(city) # 北京
五、None类型
None:表示"空"、"无意义"的特殊字面量,类型是 NoneType
# 示例1:无return的函数返回None
def say_hello():
print("Hello")
result = say_hello() # Hello
print(result) # None
print(type(result)) # <class 'NoneType'>
# 示例2:主动返回None def do_nothing(): return None print(do_nothing()) # None
# 示例3:None在if判断中相当于False
def check_age(age):
if age >= 18:
return "成年"
else:
return None
result = check_age(15)
if result: # None相当于False
print(result)
else:
print("未成年") # 未成年
# 示例4:None用于声明空变量
name = None
if name is None:
print("姓名未设置") # 姓名未设置
六、函数说明文档
作用:通过注释解释函数的功能
def add(x, y): """ 两数相加的函数 :param x: 第一个加数 :param y: 第二个加数 :return: 两数之和 """ return x + y print(add(5, 3)) # 8 # 在PyCharm中,鼠标悬停在函数名上可以查看说明文档
七、函数的嵌套调用
定义:在一个函数内部调用另一个函数
def func_b():
print("--- 开始执行B函数 ---")
print("B函数完成")
print("--- 结束B函数 ---")
def func_a():
print("--- 开始执行A函数 ---")
func_b() # 嵌套调用B函数
print("--- 结束A函数 ---")
func_a()
# 输出:
# --- 开始执行A函数 ---
# --- 开始执行B函数 ---
# B函数完成
# --- 结束B函数 ---
# --- 结束A函数 ---
# 更复杂的嵌套示例
def greet(name):
print(f"你好,{name}")
def welcome():
print("欢迎光临")
greet("张三") # 调用greet函数
welcome()
# 输出:
# 欢迎光临
# 你好,张三
八、变量的作用域
1. 局部变量
定义在函数内部的变量,只在函数内部生效
def test():
num = 100 # 局部变量
print(f"函数内部:{num}") # 函数内部:100
test()
# print(num) # 报错!函数外部无法访问局部变量
2. 全局变量
在函数内部和外部都可以使用的变量
# 全局变量
name = "张三"
def test():
print(f"函数内部访问全局变量:{name}") # 函数内部访问全局变量:张三
test()
print(f"函数外部访问全局变量:{name}") # 函数外部访问全局变量:张三
3. global关键字:在函数内修改全局变量
# 错误示例:函数内直接赋值会创建局部变量
num = 100
def test():
num = 200 # 这是创建了局部变量,不是修改全局变量
print(f"函数内部:{num}") # 函数内部:200
test()
print(f"函数外部:{num}") # 函数外部:100(全局变量未被修改)
# 正确示例:使用global关键字
num = 100
def test():
global num # 声明使用全局变量
num = 200 # 现在修改的是全局变量
print(f"函数内部:{num}") # 函数内部:200
test()
print(f"函数外部:{num}") # 函数外部:200(全局变量被修改)
# 示例:多个函数共享全局变量
money = 5000
def add_money():
global money
money += 1000
print(f"存款后:{money}") # 存款后:6000
def sub_money():
global money
money -= 500
print(f"取款后:{money}") # 取款后:5500
add_money()
sub_money()
九、综合案例:黑马ATM系统
# 全局变量
money = 5000000 # 默认余额
name = None # 客户姓名
def main_menu():
"""显示主菜单"""
print("=" * 30)
print(f"{name},您好,欢迎来到黑马ATM")
print("1. 查询余额")
print("2. 存款")
print("3. 取款")
print("4. 退出")
print("=" * 30)
choice = input("请选择操作:")
if choice == "1":
query_balance()
elif choice == "2":
deposit()
elif choice == "3":
withdraw()
elif choice == "4":
print("感谢使用,再见!")
return
else:
print("输入有误,请重新选择")
main_menu()
def query_balance():
"""查询余额"""
print("=" * 30)
print(f"{name},您好,您的余额是:{money}元")
print("=" * 30)
back_to_menu()
def deposit():
"""存款"""
global money
print("=" * 30)
amount = int(input("请输入存款金额:"))
money += amount
print(f"存款成功!当前余额:{money}元")
print("=" * 30)
back_to_menu()
def withdraw():
"""取款"""
global money
print("=" * 30)
amount = int(input("请输入取款金额:"))
if amount > money:
print("余额不足!")
else:
money -= amount
print(f"取款成功!当前余额:{money}元")
print("=" * 30)
back_to_menu()
def back_to_menu():
"""返回主菜单"""
input("按回车键返回主菜单...")
main_menu()
# 程序启动
name = input("请输入您的姓名:")
main_menu()
运行示例(假设输入):
请输入您的姓名:张三 ============================== 张三,您好,欢迎来到黑马ATM 1. 查询余额 2. 存款 3. 取款 4. 退出 ============================== 请选择操作:1 ============================== 张三,您好,您的余额是:5000000元 ============================== 按回车键返回主菜单... ============================== 张三,您好,欢迎来到黑马ATM 1. 查询余额 2. 存款 3. 取款 4. 退出 ============================== 请选择操作:2 ============================== 请输入存款金额:1000 存款成功!当前余额:5001000元 ============================== 按回车键返回主菜单... ============================== 张三,您好,欢迎来到黑马ATM 1. 查询余额 2. 存款 3. 取款 4. 退出 ============================== 请选择操作:3 ============================== 请输入取款金额:5000 取款成功!当前余额:4996000元 ============================== 按回车键返回主菜单... ============================== 张三,您好,欢迎来到黑马ATM 1. 查询余额 2. 存款 3. 取款 4. 退出 ============================== 请选择操作:4 感谢使用,再见!
十、函数知识速查表
| 知识点 | 语法 | 示例 |
|---|---|---|
| 定义函数 | def 函数名(): |
def say_hello(): |
| 参数 | def 函数名(参数): |
def add(x, y): |
| 返回值 | return 值 |
return x + y |
| None | None |
return None |
| 函数说明 | 三引号注释 | """说明文档""" |
| 嵌套调用 | 函数内调用函数 | func_b() |
| 局部变量 | 函数内定义 | x = 10 |
| 全局变量 | 函数外定义 | x = 10 |
| global | global 变量名 |
global x |
return注意点:
-
return执行后函数立即结束
-
无return时函数返回None
-
可以返回多个值(实际是元组)
变量作用域:
-
局部变量:只能在函数内部使用
-
全局变量:可以在任何地方使用
-
修改全局变量需要
global关键字
更多推荐

所有评论(0)