Python基础教程:函数全套零基础精讲
本节课是Python核心基础重难点,适合零基础小白系统入门。函数是Python代码封装、代码复用的核心,也是后续学习类、模块、项目开发的基础。本节课不讲碎片化知识点,全程系统化、通俗易懂,带大家彻底吃透Python函数核心用法。
一、什么是函数?
1. 生活化理解
函数就是提前封装好的、可以重复使用的代码块。
类比生活:洗衣机。
你不需要每次洗衣服都手动搓、洗、甩干,只需要按下按钮(调用函数),机器自动完成整套流程。
对应代码:不需要重复写重复代码,只需要封装成函数,随时随地调用。
2. 专业定义
函数是组织好的、可重复使用的、实现特定功能的代码片段。
函数的核心作用:
便于维护:功能统一封装,修改只需要改一处,全局生效
逻辑分层:复杂程序拆分多个函数,各司其职,可读性极强
3. 函数的两大分类
内置函数:Python官方自带,直接调用即可,如 print()、input()、len()
自定义函数:开发者根据业务需求,自己编写的函数(本节课重点)
二、函数的创建与调用
1. 函数完整语法格式
# 定义函数def 函数名(参数列表):# 函数体:实现具体功能的代码 代码逻辑return 返回值 # 可选
2. 语法关键字详解
def:define 的缩写,定义函数的固定关键字,必不可少
函数名:自定义命名,遵循变量命名规则(字母、数字、下划线,不能数字开头,见名知意)
():参数容器,可空、可多个,用于接收外部传入的数据
冒号 ::函数头部结束标志,代表下方是函数体代码块
缩进代码:函数体,必须缩进(4个空格),是函数的核心功能逻辑
return:函数返回结果,可选,没有则默认返回 None
3. 空函数(无参数、无返回值)
示例代码:定义一个打招呼的函数
# 1. 定义函数def say_hello():print("大家好,欢迎学习Python函数!")print("函数封装成功,可重复调用!")# 2. 调用函数say_hello()print("-" * 30)# 重复调用say_hello()
运行结果
大家好,欢迎学习Python函数!函数封装成功,可重复调用!------------------------------大家好,欢迎学习Python函数!函数封装成功,可重复调用!
4. 核心规则
三、函数的参数(重点难点)
参数的作用:让函数变得通用、灵活,可以接收外部数据,实现动态功能。
无参数函数:功能固定,只能执行固定逻辑;
有参数函数:接收不同数据,执行不同结果,适配更多场景。
1. 形参 和 实参(基础概念)
形参(形式参数):定义函数时,括号里的变量,只起占位作用
实参(实际参数):调用函数时,括号里传入的真实数据
示例演示
# a、b 是形参def add_num(a, b):print(f"两数之和为:{a + b}")# 10、20 是实参add_num(10, 20)# 传入不同实参,得到不同结果add_num(50, 30)
运行结果
两数之和为:30两数之和为:80
2. 必备四大参数类型
(1)位置参数
规则:按位置顺序一一对应传入,数量、顺序必须完全匹配
# 定义函数:3个形参def student_info(name, age, gender):print(f"姓名:{name},年龄:{age},性别:{gender}")# 位置传参,顺序对应student_info("张三", 18, "男")student_info("李四", 20, "女")
运行结果:
姓名:张三,年龄:18,性别:男姓名:李四,年龄:20,性别:女
⚠️ 报错提醒:参数数量不对、顺序错乱,程序直接报错。
(2)关键字参数
规则:调用函数时,指定形参名传参,顺序可以随意打乱,不用严格对应位置
def student_info(name, age, gender):print(f"姓名:{name},年龄:{age},性别:{gender}")# 关键字传参,顺序无关student_info(age=22, name="王五", gender="男")
运行结果:
姓名:王五,年龄:22,性别:男
✅ 适用场景:参数较多时,避免记混顺序
(3)默认参数
规则:定义函数时,给形参设置默认值;调用时如果不传该参数,自动使用默认值,传参则覆盖默认值。
# gender设置默认参数为 男def student_info(name, age, gender="男"):print(f"姓名:{name},年龄:{age},性别:{gender}")# 不传gender,使用默认值student_info("赵六", 19)# 传入gender,覆盖默认值student_info("小红", 18, "女")
运行结果:
姓名:赵六,年龄:19,性别:男姓名:小红,年龄:18,性别:女
⚠️ 规则:默认参数必须放在非默认参数后面,否则报错
(4)可变参数
场景:不确定用户会传入多少个参数,使用可变参数,支持传入任意数量数据。
语法:*args(接收任意多个位置参数,打包成元组)
# 接收任意多个数字,求和def sum_all(*args): total = 0for num in args: total += numprint(f"累加总和:{total}")# 传入任意个数参数sum_all(1, 2)sum_all(1, 2, 3, 4, 5)sum_all(10, 20, 30, 40)
运行结果:
累加总和:3累加总和:15累加总和:100
四、return 返回值
前面的函数只是单纯打印结果,数据无法二次使用;return 作用是将函数的执行结果返回出来,供外部代码接收、二次运算、存储。
1. 无 return 的函数
函数默认返回 None(空值)
def test():print("无返回值函数")res = test()print("返回值:", res)
运行结果:
无返回值函数返回值: None
2. 单个 return 返回值
# 计算两数之和并返回结果def add_num(a, b):return a + b# 接收函数返回值result = add_num(15, 25)# 二次使用返回值print(f"计算结果:{result}")print(f"结果翻倍:{result * 2}")
运行结果:
计算结果:40结果翻倍:80
✅ 核心优势:返回值可以参与后续代码运算,打印结果无法二次使用
3. return 返回多个值
Python 支持一个函数返回多个值,默认打包成元组返回
# 计算两数的和、差、积def calc_num(a, b): sum_res = a + b sub_res = a - b mul_res = a * b# 返回多个结果return sum_res, sub_res, mul_res# 解包接收多个返回值sum1, sub1, mul1 = calc_num(10, 5)print(f"和:{sum1},差:{sub1},积:{mul1}")
运行结果:
和:15,差:5,积:50
4. return 终止函数执行
return 执行后,会直接结束当前函数,后续代码不再执行
def test_return():print("第一行代码")returnprint("第二行代码(不会执行)")test_return()
运行结果:
第一行代码
五、函数核心总结
函数本质:封装重复代码,实现代码复用,简化项目结构;
参数分类:位置参数(必传有序)、关键字参数(无序)、默认参数(可选)、可变参数(不定长);
return作用:返回函数结果供外部使用、终止函数执行,无return默认返回None;
核心区别:print只是打印展示,return才是真正输出数据,支持二次运算。
六、实战练习案例:从给定数组中找出所有质数
结合本节课所学的函数定义、参数、return返回值、循环遍历知识点,完成综合实战案例,巩固函数核心用法。
1. 案例需求
给定一个任意数字数组,编写函数筛选出数组中所有的质数,最终返回所有质数组成的新数组,并打印结果。
质数定义:大于1的自然数,除了1和它本身,没有其他因数(如2、3、5、7、11)。
2. 解题思路
第一步:定义判断质数的工具函数,传入数字,返回是否为质数
第二步:定义筛选函数,遍历原数组,逐个判断数字是否为质数
第三步:收集所有质数,通过return返回,供外部调用输出
3. 完整实战代码
# 1. 定义判断质数的函数def is_prime(num):# 小于2的数一定不是质数if num < 2:return False# 遍历判断是否有其他因数for i in range(2, num):if num % i == 0:# 能被整除,不是质数return False# 循环结束无其他因数,是质数return True# 2. 定义数组筛选质数函数def find_prime_list(arr): prime_result = [] # 存储所有质数# 遍历数组所有数字for n in arr:if is_prime(n): prime_result.append(n)# 返回筛选后的质数数组return prime_result# 3. 测试调用if __name__ == "__main__":# 给定原始数组 num_array = [2, 5, 8, 11, 14, 17, 20, 23, 1, 0, 31]# 调用函数获取质数数组 prime_nums = find_prime_list(num_array)# 打印结果print(f"原始数组:{num_array}")print(f"筛选出的所有质数:{prime_nums}")
4. 运行结果
原始数组:[2, 5, 8, 11, 14, 17, 20, 23, 1, 0, 31]筛选出的所有质数:[2, 5, 11, 17, 23, 31]