一、知识点
1. 函数的定义
函数就是 "把一段常用的代码打包,起个名字",以后想用这段代码时,直接叫这个名字就行。Python 里用 def 函数名(参数): 来定义,比如 def add(a,b): return a+b 就是一个计算加法的函数。
2. 变量作用域
局部变量和全局变量
局部变量:在函数里面 定义的变量,只能在函数内部用,外面用不了(比如函数里的a)。
全局变量:在函数外面 定义的变量,函数内部可以用(但要修改的话得加global关键字)。
3. 函数的参数类型
位置参数:调用函数时,必须按顺序 传的参数(比如def add(a,b):里的a和b,调用add(1,2)就是按位置传)。
默认参数:定义函数时给了 "默认值" 的参数,调用时可以不传(比如def add(a,b=0):,b默认是 0,调用add(1)也能运行)。
不定参数:
*args:接收任意数量的位置参数 ,打包成 "元组"(比如def sum(*args):,调用sum(1,2,3)时,args就是(1,2,3))。
**kwargs:接收任意数量的关键字参数 ,打包成 "字典"(比如def info(**kwargs):,调用info(name="张三", age=18)时,kwargs就是{"name":"张三", "age":18})。
4. 传递参数的手段
关键词参数 调用函数时,直接写 "参数名 = 值",不用按顺序传(比如add(b=2,a=1)和add(1,2)效果一样)。
5. 传递参数的顺序
如果同时用位置参数、默认参数、不定参数,顺序要遵守:** 位置参数 → *args → 默认参数 → kwargs (比如def func(a, *args, b=0, **kwargs):)。
在 Python 里,函数调用、列表 / 字典定义时,最后一个元素后面加逗号(比如model(source=0, stream=True,))是合法的,而且是好习惯 ------ 比如后续要加新参数时,不会因为漏加逗号报错。
二 、 作业
1. 计算圆的面积
- 任务:编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 = π * radius²(可以使用 math.pi 作为 π 的值)
- 要求:函数接收一个位置参数 radius。计算半径为 5、0、-1 时候的面积
- 注意点:可以采取 try-except 使函数变得更加稳健,如果传入的半径为负数,函数应该返回 0 (或者可以考虑引发一个 ValueError,但为了简单起见,先返回 0)。
python
import math # 导入math模块,用math.pi表示π
def calculate_circle_area(radius):
try:
# 先判断半径是否为负
if radius < 0:
return 0
# 计算面积
return math.pi * (radius ** 2)
except:
# 遇到非数字等错误时,返回0
return 0
# 测试:计算半径为5、0、-1的面积
print(f"半径为5的面积为:{calculate_circle_area(5):.3f}") # 输出≈78.5398
print(f"半径为0的面积为:{calculate_circle_area(0)}")
print(f"半径为-1的面积为:{calculate_circle_area(-1)}")
html
半径为5的面积为:78.540
半径为0的面积为:0.0
半径为-1的面积为:0
import math:导入Python自带的数学模块,用math.pi获取π的精确值。
try-except:让函数更"稳健"------如果传入的不是数字,不会报错,而是返回0。
先判断radius < 0,符合题目要求,负数半径返回0。
2. 计算矩形的面积
- 任务:编写一个名为 calculate_rectangle_area 的函数,该函数接收矩形的长度 length 和宽度 width 作为参数,并返回矩形的面积。
- 公式:矩形面积 = length * width
- 要求:函数接收两个位置参数 length 和 width。
- 函数返回计算得到的面积。
- 如果长度或宽度为负数,函数应该返回 0。
python
def calculate_rectangle_area(length, width):
# 判断长或宽是否为负
if length < 0 or width < 0:
return 0
# 计算面积(长×宽)
return length * width
# 测试示例
print(calculate_rectangle_area(5, 4))
print(calculate_rectangle_area(-2, 3))
html
20
0
3. 计算任意数量数字的平均值
- 任务:编写一个名为 calculate_average 的函数,该函数可以接收任意数量的数字作为参数(引入可变位置参数(*args)),并返回它们的平均值。
- 要求:使用 *args 来接收所有传入的数字。
- 如果没有任何数字传入,函数应该返回 0。
- 函数返回计算得到的平均值。
python
def calculate_average(*args):
if not args:
return 0
return sum(args) / len(args)
print(f'6,7,8,9,10的平均值为: {calculate_average(6,7,8,9,10)}')
print(calculate_average())
html
6,7,8,9,10的平均值为: 8.0
0
4. 打印用户信息
- 任务: 编写一个名为 print_user_info 的函数,该函数接收一个必需的参数 user_id,以及任意数量的额外用户信息(作为关键字参数)。
- 要求:
- user_id 是一个必需的位置参数。
- 使用 **kwargs 来接收额外的用户信息。
- 函数打印出用户 ID,然后逐行打印所有提供的额外信息(键和值)。
- 函数不需要返回值
python
def print_user_info(user_id, **kwargs):
print(f"用户ID:{user_id}")
for key, value in kwargs.items():
print(f"{key}: {value}")
print_user_info(20251204, name="HAPPY", country="CHINA")
html
用户ID:20251204
name: HAPPY
country: CHINA
5. 格式化几何图形描述
- 任务:编写一个名为 describe_shape 的函数,该函数接收图形的名称 shape_name(必需),一个可选的 color(默认 "black"),以及任意数量的描述该图形尺寸的关键字参数(例如 radius=5 对于圆,length=10,width=4 对于矩形)。
- 要求:shape_name 是必需的位置参数。
- color 是一个可选参数,默认值为 "black"。
- 使用 **kwargs 收集描述尺寸的参数。
- 函数返回一个描述字符串,格式如下:
- "A [color] [shape_name] with dimensions: [dim1_name]=[dim1_value], [dim2_name]=[dim2_value], ..." 如果 **kwargs 为空,则尺寸部分为 "with no specific dimensions."
python
def describe_shape(shape_name, color="black", **kwargs):
# 处理尺寸部分的字符串
if kwargs:
# 把kwargs的键值对拼成"key=value"的格式,用逗号连接
dim_str = ", ".join([f"{key}={value}" for key, value in kwargs.items()])
dim_part = f"with dimensions: {dim_str}"
else:
# 如果没有尺寸参数,显示"no specific dimensions"
dim_part = "with no specific dimensions."
# 拼接最终的描述字符串
return f"A {color} {shape_name} {dim_part}"
print(describe_shape("circle", color="red", radius=5))
print(describe_shape("矩形", color= "blue", length= 10, width= 4))
print(describe_shape("三角形"))
html
A red circle with dimensions: radius=5
A blue 矩形 with dimensions: length=10, width=4
A black 三角形 with no specific dimensions.
总结:
函数定义 用
def 函数名(参数):打包重复代码,通过return返回结果;调用时用函数名(参数),实现代码复用。变量作用域
- 局部变量:函数内定义,仅在函数内有效;
- 全局变量:函数外定义,全代码可用;函数内修改全局变量需加
global关键字。参数类型
- 位置参数:必填,按顺序传参;
- 默认参数:
参数名=默认值,可选传参(需放在位置参数后);- 不定参数:
*args打包任意位置参数为元组,**kwargs打包任意关键字参数为字典。传参规则
- 关键词参数:用
参数名=值传参,可打乱顺序(位置参数需在前);- 参数顺序:
位置参数 → *args → 默认参数 → **kwargs。尾部逗号函数调用、列表 / 字典定义时,最后一个元素后加逗号(尾部逗号)是合法的良好习惯,方便后续修改。
勇闯python的第29天@浙大疏锦行