Python编程实战 - 函数与模块化编程 - 参数与返回值

在上一节中,我们学习了如何定义和调用函数,了解了函数的基本结构。 然而,在实际编程中,函数往往需要更强的灵活性,比如:

  • 能接受不同数量、类型的输入参数;
  • 能根据情况返回一个或多个结果。

本节我们将深入学习 函数的参数类型返回值机制,让你掌握函数的核心逻辑与应用技巧。


一、函数参数的作用

参数是函数与外部数据沟通的桥梁。 通过参数,函数可以在不同场景下复用同一逻辑,而不必重复编写相似的代码。


二、函数参数的类型

Python 的函数参数非常灵活,主要分为以下几类:

1. 位置参数(Positional Arguments)

最常见的参数类型,调用时必须按顺序传值。

python 复制代码
def greet(name, age):
    print(f"你好,{name},你今年 {age} 岁啦!")

greet("小明", 18)

调用时必须保证参数数量一致,否则会报错。


2. 关键字参数(Keyword Arguments)

调用函数时可以通过指定参数名来传值,顺序可以不同。

python 复制代码
def show_info(name, city):
    print(f"{name} 来自 {city}")

show_info(city="北京", name="小红")

这种方式可读性更强,尤其适合参数较多的函数。


3. 默认参数(Default Arguments)

给参数设置默认值,使函数更灵活。

python 复制代码
def connect(host="localhost", port=3306):
    print(f"正在连接服务器:{host}:{port}")

connect()                      # 使用默认值
connect("192.168.1.1", 8080)   # 传入新值

默认参数常用于配置型函数,比如数据库连接、API请求等。


4. 可变参数(*args)

当不确定会传入多少个参数时,可以使用 *args。 它会将所有位置参数打包成一个元组。

python 复制代码
def add(*nums):
    total = sum(nums)
    print("总和为:", total)

add(1, 2, 3)
add(5, 10, 15, 20)

输出:

复制代码
总和为: 6
总和为: 50

5. 关键字可变参数(**kwargs)

当参数是键值对形式时,可以使用 **kwargs,它会将所有关键字参数打包成一个字典。

python 复制代码
def show_user(**info):
    print(info)

show_user(name="小李", age=20, city="广州")

输出:

arduino 复制代码
{'name': '小李', 'age': 20, 'city': '广州'}

**kwargs 常用于可配置型函数,比如日志记录、数据存储、API请求。


6. 参数的组合使用

Python 支持在一个函数中混合使用多种参数类型:

python 复制代码
def func(a, b=10, *args, **kwargs):
    print(a, b, args, kwargs)

func(1, 2, 3, 4, x=5, y=6)

输出:

arduino 复制代码
1 2 (3, 4) {'x': 5, 'y': 6}

注意:参数定义顺序固定为 位置参数默认参数可变参数关键字可变参数


三、函数的返回值

函数通过 return 语句将结果返回给调用者。 返回值可以是任意类型,也可以是多个值。

1. 单个返回值

python 复制代码
def square(x):
    return x * x

print(square(5))  # 25

2. 多个返回值(返回元组)

python 复制代码
def calc(a, b):
    return a + b, a - b

result = calc(10, 3)
print(result)         # (13, 7)
sum_val, diff_val = calc(10, 3)
print(sum_val, diff_val)  # 13 7

Python 实际上是将多个值打包成一个元组返回的。


3. 无返回值(隐式返回 None)

python 复制代码
def greet(name):
    print(f"你好,{name}")

result = greet("Tom")
print(result)

输出:

css 复制代码
你好,Tom
None

当函数没有 return 时,Python 会自动返回 None


四、return 的执行特点

  1. 一旦执行 return,函数立即结束;
  2. 函数中可以有多个 return,但只会执行第一个被触发的;
  3. 可以用 return 提前结束函数逻辑。

示例:

python 复制代码
def divide(a, b):
    if b == 0:
        return "除数不能为0"
    return a / b

print(divide(10, 2))  # 5.0
print(divide(10, 0))  # 除数不能为0

五、实战案例:购物结算函数

需求:

  • 接收任意数量的商品价格;
  • 计算总价;
  • 可选打折参数;
  • 返回最终金额。
python 复制代码
def checkout(*prices, discount=1.0):
    """购物结算函数"""
    total = sum(prices)
    pay = total * discount
    return round(pay, 2)

print(checkout(100, 200, 300))
print(checkout(100, 200, 300, discount=0.9))

输出:

复制代码
600.0
540.0

六、总结

参数类型 特点 示例
位置参数 按顺序传值 func(1, 2)
关键字参数 指定参数名 func(a=1, b=2)
默认参数 设置默认值 def func(a=1)
可变参数 接收任意数量的位置参数 *args
关键字可变参数 接收任意数量的键值参数 **kwargs

七、小结

  • 参数让函数更加灵活,return 让函数能输出结果;
  • *args**kwargs 是 Python 的"可扩展接口";
  • 返回值可以是任何类型,甚至是函数本身(这将在高阶函数中讲到);
  • 写函数时,应保持输入清晰、返回明确、逻辑单一。

结语: 掌握函数的参数与返回值,你就能编写出灵活、可复用的代码模块。

相关推荐
程序员爱钓鱼3 小时前
Python编程实战 - 函数与模块化编程 - 局部变量与全局变量
后端·python·ipython
摇滚侠6 小时前
Spring Boot3零基础教程,KafkaTemplate 发送消息,笔记77
java·spring boot·笔记·后端·kafka
jiuri_12158 小时前
Docker使用详解:在ARM64嵌入式环境部署Python应用
python·docker·容器
chenchihwen8 小时前
AI代码开发宝库系列:Function Call
人工智能·python·1024程序员节·dashscope
计算机学长felix9 小时前
基于SpringBoot的“面向校园的助力跑腿系统”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
紫荆鱼10 小时前
设计模式-迭代器模式(Iterator)
c++·后端·设计模式·迭代器模式
汤姆yu10 小时前
基于python的化妆品销售分析系统
开发语言·python·化妆品销售分析
RainSky_10 小时前
LNMP 一键安装包部署 Django 项目
后端·django·1024程序员节