Day 29 类的定义及参数

一、知识点

1. 函数的定义

函数就是 "把一段常用的代码打包,起个名字",以后想用这段代码时,直接叫这个名字就行。Python 里用 def 函数名(参数): 来定义,比如 def add(a,b): return a+b 就是一个计算加法的函数。

2. 变量作用域

局部变量和全局变量

局部变量:在函数里面 定义的变量,只能在函数内部用,外面用不了(比如函数里的a)。

全局变量:在函数外面 定义的变量,函数内部可以用(但要修改的话得加global关键字)。

3. 函数的参数类型

位置参数:调用函数时,必须按顺序 传的参数(比如def add(a,b):里的ab,调用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.

总结:

  1. 函数定义def 函数名(参数):打包重复代码,通过return返回结果;调用时用函数名(参数),实现代码复用。

  2. 变量作用域

    • 局部变量:函数内定义,仅在函数内有效;
    • 全局变量:函数外定义,全代码可用;函数内修改全局变量需加global关键字。
  3. 参数类型

    • 位置参数:必填,按顺序传参;
    • 默认参数:参数名=默认值,可选传参(需放在位置参数后);
    • 不定参数:*args打包任意位置参数为元组,**kwargs打包任意关键字参数为字典。
  4. 传参规则

    • 关键词参数:用参数名=值传参,可打乱顺序(位置参数需在前);
    • 参数顺序:位置参数 → *args → 默认参数 → **kwargs
  5. 尾部逗号函数调用、列表 / 字典定义时,最后一个元素后加逗号(尾部逗号)是合法的良好习惯,方便后续修改。

勇闯python的第29天@浙大疏锦行

相关推荐
工藤学编程1 小时前
零基础学AI大模型之Milvus向量Search查询综合案例实战
人工智能·milvus
ReinaXue1 小时前
跨模态预训练大模型【CLIP】:Contrastive Language–Image Pre-training
图像处理·人工智能·深度学习·计算机视觉·语言模型
福大大架构师每日一题1 小时前
PyTorch v2.9.1 发布:重要 Bug 修复与性能优化详解
人工智能·pytorch·bug
海阔的天空1 小时前
VSCode通过continue插件免费安装AI模型实现自动编程
运维·ide·人工智能·vscode·编辑器·ai编程
老段工作室1 小时前
微调自动语音识别模型(ASR),精准识别各种不标准发音 及蹩脚英文发音
人工智能·语音识别
码界奇点1 小时前
基于Dash+FastAPI的通用中后台管理系统设计与实现
python·车载系统·毕业设计·fastapi·源代码管理·dash
white-persist1 小时前
【攻防世界】reverse | Mysterious 详细题解 WP
c语言·开发语言·网络·汇编·c++·python·安全
吃肉夹馍不要夹馍1 小时前
【opencv图片倾斜矫正】
人工智能·opencv·计算机视觉
sca1p311 小时前
新南威尔士大学 LiM
论文阅读·人工智能·加密流量分类