函数定义
函数是组织好的、可重复使用的、用来实现特定功能的代码片段。
定义语法
# 定义函数
def 函数名(参数列表):
函数体
......
return 返回值调用语法
# 调用函数
函数名(参数)示例
# 定义函数
def out_line():
print('-------------------------')
# 调用函数
out_line()函数使用的注意事项
- 函数必须先定义,在调用
- 函数定义时,并不会执行,只有在调用函数时,函数体的逻辑才会运行
- 函数中通过缩进来描述归属关系
- 函数定义时的参数列表与返回值语句是可有可无的(由需求确定)
函数的参数与返回值
在定义函数时,根据业务需要,可以指定参数与返回值。
参数的概念
- 形参(形式参数):函数定义时括号里的参数,只能在函数内使用(局部变量)
- 实参(实际参数):函数在实际调用时传入的参数
示例:单参数函数
# 计算圆的面积
def circle_area(r):
area = 3.14 * r * r
return area
# 调用函数
c_area = circle_area(10)
print(c_area) # 314.0示例:多参数函数
# 计算长方形的面积
def rectangle_area(l, w):
area = l * w
return area
# 调用函数
r_area = rectangle_area(20, 10)
print(r_area) # 200注意事项
- 函数定义时如果有多个参数,多个参数之间使用逗号(,)分隔
return语句只有返回功能,而没有输出打印的功能,如果要输出,需要结合print()函数来实现
函数的多个返回值
函数可以有多个返回值,返回值会封装到元组中。
def circle_area_len(r):
return 3.14 * r * r, 2 * 3.14 * r
# 方式1:封装到元组中
al = circle_area_len(10)
print(al) # (314.0, 62.800000000000004)
# 方式2:元组解包
area, len = circle_area_len(10)
print(area, len) # 314.0 62.800000000000004函数的说明文档
函数的说明文档(Docstring)是写在函数开头,用三个引号包裹的字符串,用于解释函数的功能、参数、返回值等信息,方便调用者清楚函数的具体作用及细节。
语法格式
def 函数名(参数列表):
"""
函数功能描述
:param 参数名: 参数说明
:return: 返回值说明
"""
函数体
return 返回值示例
def circle_area_len(r):
"""
该函数用于根据圆的半径,计算圆的面积和圆的周长
:param r: 圆的半径
:return: 圆的面积,圆的周长
"""
return 3.14 * r * r, 2 * 3.14 * r查看函数说明文档
- 使用
help函数:help(circle_area_len) - 鼠标悬浮在函数上,自动展示(IDE推荐)
记住:好的文档,能让你的代码更容易理解、使用和维护!
总结口诀
- 定义用def,调用加括号
- 形参定义时,实参调用时
- 多参用逗号,返回用return
- 多值返元组,解包用逗号
- 文档写三引号,help可查看
相关
练习题
一、知识回顾(读完直接做下面的实践题)
- 函数定义:
def 函数名(参数列表):加缩进的函数体,return 返回值把结果交回调用处 - 调用:写
函数名(参数);函数必须先定义后调用,定义时函数体不会执行,调用时才运行 - 形参(定义时括号里的参数,只能在函数内使用)与实参(调用时真正传进去的值)是两回事
- 多个参数之间用逗号分隔;参数列表和返回值都是可有可无的,看需求
return只有"返回"功能、没有打印功能,要看到结果得配合print()- 函数执行到
return就结束,后面的代码不再执行;没有return的函数返回None - 多个返回值:写成
return 值1, 值2,实际返回一个元组;可以用两个变量接(元组解包),也可以用一个变量接整个元组 - 说明文档(Docstring):写在函数体开头、用三引号包裹,注明功能、
:param 参数名:、:return: - 查看说明文档:
help(函数名);IDE 里鼠标悬浮在函数上也会自动展示 - 口诀:定义用 def,调用加括号;形参定义时,实参调用时;多参用逗号,返回用 return;多值返元组,解包用逗号
二、裸写题
- 分数 >= 90:返回 "A"
- 分数 >= 75:返回 "B"
- 分数 >= 60:返回 "C"
- 分数 < 60:返回 "D"
批改(2026-09-28):✅ 正确(实测 93→A、90→A、80→B、75→B、65→C、60→C、59→D,四个分支都对;只是改用
input()交互,未像参考答案那样一次跑多组)。- 提示(先自己想,实在想不出再点开)
一级 · 思路:分数从高到低依次判断,命中一档就把对应字母交回去;最后一个分支兜住剩下的分数 二级 · 方法:
def 函数名(参数):定义;用if score >= 90:/elif/else:分档;每档return "A"这样的字符串 三级 · 骨架:def get_grade(score):/if score >= ____:/return "A"/elif ...:/else: return "____"- 参考答案(做完再点开)
python# 2-1 def get_grade(score): if score >= 90: return "A" elif score >= 75: return "B" elif score >= 60: return "C" else: return "D" print(get_grade(93)) # A print(get_grade(80)) # B print(get_grade(65)) # C print(get_grade(40)) # D批改(2026-09-28):⚠️ 函数本身正确,但只测了
is_palindrome("level")一个回文用例(输出 True),没有反例;建议补print(is_palindrome("hello"))(应为 False)和中文/数字用例。- 提示(先自己想,实在想不出再点开)
一级 · 思路:回文就是"原串"和"把它整个倒过来"完全一样,所以先得到倒序字符串,再和原串比一比 二级 · 方法:字符串切片
s[::-1]得到倒序;返回比较结果s == s[::-1](比较运算本身就是布尔值,不必再写 if) 三级 · 骨架:def is_palindrome(s):/return s == s[____]- 参考答案(做完再点开)
python# 2-2 def is_palindrome(s): return s == s[::-1] print(is_palindrome("level")) # True print(is_palindrome("hello")) # False print(is_palindrome("黄山落叶松叶落山黄")) # True print(is_palindrome("12321")) # True print(is_palindrome("12345")) # False批改(2026-09-28):⚠️ 换算逻辑和输出正确(772 → 0 小时 12 分钟 52 秒),但有两点差在题面:函数名拼成了
time_conver(要求time_convert),且只测了小时为 0 的 772;建议改用time_convert(3772)验证小时位。- 提示(先自己想,实在想不出再点开)
一级 · 思路:先除出整小时数(不够 1 小时的零头留下继续算);剩下的秒按同样的办法拆出分钟和秒 二级 · 方法:整除
//取商、取余%拿余数——hours = seconds // 3600、minutes = (seconds % 3600) // 60、seconds = (seconds % 3600) % 60;最后用 f-string 拼成f"{hours} 小时 {minutes} 分钟 {seconds} 秒"三级 · 骨架:hours = seconds ____ 3600/minutes = (seconds % 3600) ____ 60/return f"{____} 小时 {minutes} 分钟 {seconds} 秒"- 参考答案(做完再点开)
python# 2-3 def time_convert(seconds): hours = seconds // 3600 minutes = (seconds % 3600) // 60 seconds = (seconds % 3600) % 60 return f"{hours} 小时 {minutes} 分钟 {seconds} 秒" print(time_convert(3772)) # 1 小时 2 分钟 52 秒
