当前位置:首页>python>从零开始学python-函数_2

从零开始学python-函数_2

  • 2026-08-22 16:12:03
从零开始学python-函数_2

Hi~新朋友,记得点上面蓝字(网虫root)关注哟~

前言:

函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。在Python中,函数是构建程序的基本单元。

4. 参数类型

调用函数时,可以使用以下几种类型的参数:

  • 必需参数

  • 关键字参数

  • 默认参数

  • 不定长参数

4.1 必需参数

必需参数必须以正确的顺序传入函数,调用时的数量必须和声明时一样。

🌅实例:必需参数

def describe_pet(animal_type, pet_name):    """显示宠物的信息"""    print(f"我有一只{animal_type},名字叫{pet_name}。")①. 正确调用describe_pet("猫", "咪咪")②. 错误调用:参数数量不匹配describe_pet("狗")  # 这会引发 TypeError

以上实例输出结果:

我有一只猫,名字叫咪咪。

4.2 关键字参数

关键字参数允许函数调用时参数的顺序与声明时不一致,Python 解释器能够用参数名匹配参数值。

🔄实例:关键字参数

def introduce_student(name, age, city):    """介绍学生信息"""    print(f"学生姓名:{name}")    print(f"年龄:{age}")    print(f"城市:{city}")# 使用关键字参数,顺序可以不同introduce_student(age=18, city="北京", name="李华")print("-" * 20)# 混合使用位置参数和关键字参数(位置参数必须在关键字参数之前)introduce_student("王芳", city="上海", age=20)

以上实例输出结果:

学生姓名:李华年龄:18城市:北京--------------------学生姓名:王芳年龄:20城市:上海

4.3 默认参数

调用函数时,如果没有传递某个参数,则会使用该参数的默认值。

🌊实例:默认参数

def register_user(username, is_active=True, role="普通用户"):    """注册用户,默认状态为激活,默认角色为普通用户"""    print(f"用户名:{username}")    print(f"激活状态:{'是'if is_active else'否'}")    print(f"角色:{role}")    print("-" * 15)①. 只传递必需参数register_user("alice")②. 传递部分可选参数register_user("bob", is_active=False)③. 传递所有参数register_user("charlie", is_active=True, role="管理员")

以上实例输出结果:

用户名:alice激活状态:是角色:普通用户---------------用户名:bob激活状态:否角色:普通用户---------------用户名:charlie激活状态:是角色:管理员---------------

4.4 不定长参数

当需要一个函数处理比声明时更多的参数时,可以使用不定长参数。

  • *args:接收任意数量的位置参数,并以元组形式传入。

  • **kwargs:接收任意数量的关键字参数,并以字典形式传入。

🌱实例:使用 *args 处理多余的位置参数

def calculate_sum(initial, *numbers):    """计算初始值与任意数量数字的和"""    total = initial    print(f"传入的额外数字(元组形式):{numbers}")    for num in numbers:        total += num    return total# 调用函数result1 = calculate_sum(5)print(f"总和:{result1}\n")result2 = calculate_sum(10, 1, 2, 3, 4)print(f"总和:{result2}\n")result3 = calculate_sum(100, 50, 60)print(f"总和:{result3}")

以上实例输出结果:

传入的额外数字(元组形式):()总和:5传入的额外数字(元组形式):(1, 2, 3, 4)总和:20传入的额外数字(元组形式):(50, 60)总和:210

🧩实例:使用 **kwargs 处理多余的关键字参数

def print_user_profile(name, **details):    """打印用户档案,可以包含任意多的详细信息"""    print(f"用户:{name}")    print("详细信息:")    for key, value in details.items():        print(f"  {key}: {value}")# 调用函数print_user_profile("张三", age=28, city="广州", job="工程师")print("-" * 20)print_user_profile("李四", country="中国", hobby=["阅读", "游泳"], score=95.5)

以上实例输出结果:

用户:张三详细信息:  age: 28  city: 广州  job: 工程师--------------------用户:李四详细信息:  country: 中国  hobby: ['阅读', '游泳']  score: 95.5

🌄实例:组合使用普通参数、*args 和 **kwargs

def complex_function(required, *args, **kwargs):    """演示三种参数的组合使用"""    print(f"必需参数:{required}")    if args:        print(f"额外的位置参数 (args):{args}")    if kwargs:        print(f"额外的关键字参数 (kwargs):{kwargs}")# 调用complex_function("A")print("-" * 15)complex_function("B", 1, 2, 3)print("-" * 15)complex_function("C", x=10, y=20)print("-" * 15)complex_function("D", 5, 6, name="Eve", age=25)

以上实例输出结果:

必需参数:A---------------必需参数:B额外的位置参数 (args):(1, 2, 3)---------------必需参数:C额外的关键字参数 (kwargs):{'x': 10, 'y': 20}---------------必需参数:D额外的位置参数 (args):(5, 6)额外的关键字参数 (kwargs):{'name': 'Eve', 'age': 25}

5. 匿名函数(Lambda 函数)

使用 lambda 关键字可以创建小型匿名函数。它只是一个表达式,函数体比 def 简单很多。

语法:

lambda [arg1 [, arg2, ...]]: 表达式

🔥实例 1:简单的 lambda 函数

①. 定义一个 lambda 函数,计算两个数的和add = lambda x, y: x + y②. 调用 lambda 函数print(add(3, 5))  # 输出 8print(add(10, -2)) # 输出 8③. 直接使用 lambda 而不赋值print((lambda a, b: a * b)(4, 7)) # 输出 28

以上实例输出结果:

8828

🎭实例 2:lambda 与内置函数结合使用

lambda 常用于 map(), filter(), sorted() 等函数中。

①. 使用 lambda 对列表中的每个数求平方numbers = [1, 2, 3, 4, 5]squared = list(map(lambda x: x ** 2, numbers))print(f"平方结果:{squared}")②. 使用 lambda 过滤出列表中的偶数even_numbers = list(filter(lambda x: x % 2 == 0, numbers))print(f"偶数:{even_numbers}")③. 使用 lambda 作为排序的关键字students = [("Alice", 85), ("Bob", 92), ("Charlie", 78)]# 按分数排序students_sorted = sorted(students, key=lambda student: student[1], reverse=True)print(f"按分数排序:{students_sorted}")

以上实例输出结果:

平方结果:[1, 4, 9, 16, 25]偶数:[2, 4]按分数排序:[('Bob', 92), ('Alice', 85), ('Charlie', 78)]

💡实例 3:在函数中返回 lambda

def make_multiplier(n):    """创建一个函数,该函数将其参数乘以 n"""    return lambda x: x * n# 创建两个不同的乘法函数double = make_multiplier(2)triple = make_multiplier(3)print(double(10))  # 输出 20print(triple(10))  # 输出 30print(double(7))   # 输出 14

以上实例输出结果:

203014

6. return 语句

return [表达式] 用于退出函数并选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None。

🚀实例:多个 return 路径

def check_grade(score):    """根据分数返回等级"""    if score >= 90:        return "优秀"    elif score >= 75:        return "良好"    elif score >= 60:        return "及格"    else:        return "不及格"# 测试函数grades = [95, 82, 67, 48]for g in grades:    print(f"分数:{g},等级:{check_grade(g)}")

以上实例输出结果:

分数:95,等级:优秀分数:82,等级:良好分数:67,等级:及格分数:48,等级:不及格

🎯实例:无 return 语句的函数

def say_hello(name):    print(f"Hello, {name}!")# 没有 return 语句,默认返回 Noneresult = say_hello("Python")print(f"函数返回的值:{result}")

以上实例输出结果:

Hello, Python!函数返回的值:None

7. 强制位置参数(Python 3.8+)

Python 3.8 引入了函数形参语法 /,用于指明其左侧的参数必须使用位置参数传递,不能使用关键字参数形式。

📢实例:强制位置参数

def create_point(x, y, /, z=0, *, label=None):    """    创建一个三维点    x, y: 必须使用位置参数传递    z: 可以使用位置或关键字(因为有默认值)    label: 必须使用关键字参数传递(因为 * 之后)    """    point_info = f"点坐标:({x}, {y}, {z})"    if label:        point_info += f",标签:{label}"    return point_info①. 正确调用print(create_point(1, 2))                    # x, y 位置参数print(create_point(3, 4, z=10))               # x, y 位置参数,z 关键字print(create_point(5, 6, label="A"))          # x, y 位置参数,label 关键字print(create_point(7, 8, 15, label="B"))      # x, y, z 位置参数,label 关键字②. 错误调用print(create_point(x=1, y=2))  # 错误:x, y 不能使用关键字参数print(create_point(1, 2, 3, 4)) # 错误:label 必须使用关键字参数

以上实例输出结果:

点坐标:(1, 2, 0)点坐标:(3, 4, 10)点坐标:(5, 6, 0),标签:A点坐标:(7, 8, 15),标签:B

8. 总结

  • 函数定义:使用 def 关键字,包含函数名、参数、文档字符串和函数体。

  • 函数调用:通过函数名和括号内的参数来执行函数。

  • 参数传递:理解 Python 中可变与不可变对象在函数传递时的不同行为。

  • 参数类型:必需参数、关键字参数、默认参数和不定长参数(*args, **kwargs)。

  • 匿名函数:使用 lambda 创建简单的、一次性的函数。

  • return 语句:返回函数结果,无 return 时返回 None。

  • 强制位置参数:Python 3.8+ 中使用 / 指定必须为位置参数的形参。

【微语】抱怨身处黑暗,不如提灯前行。愿你在自己存在的地方,成为一束光,照亮世界的一角。

网虫root

期待你的

分享

点赞

在看

最新文章

随机文章