Python 参数传递详解
在 Python 编程中,“传入”通常涉及三个层面:函数参数传递、类构造函数传参以及命令行参数传递,理解这些机制是编写高效、灵活代码的基础。
函数参数传递
这是最常见的场景,指在调用函数时将数据传递给函数内部。
-
位置参数 (Positional Arguments)
按照定义的顺序进行传递。def greet(name, age): print(f"你好 {name},你今年 {age} 岁。") greet("Alice", 25) # 必须按顺序传入 -
关键字参数 (Keyword Arguments)
通过“参数名=值”的形式传递,可以无视参数的定义顺序。greet(age=30, name="Bob")
-
默认参数 (Default Arguments)
在定义函数时为参数指定默认值,调用时如果不传该参数,则使用默认值。def power(base, exponent=2): return base exponent print(power(3)) # 使用默认值 2,结果为 9 print(power(3, 3)) # 传入 3,结果为 27 -
可变长度参数 (Variable-length Arguments)
当你不确定会传入多少个参数时使用:- `args`接收任意数量的位置参数,并在函数内部以 tuple (元组) 形式存储。
- `kwargs`接收任意数量的关键字参数,并在函数内部以 dict (字典) 形式存储。
def flexible_func(args, kwargs): print(f"位置参数: {args}") print(f"关键字参数: {kwargs}")
flexible_func(1, 2, 3, name=”Python”, version=3.12)
Python 的参数传递机制 (核心原理)
很多初学者会混淆 Python 是“值传递”还是“引用传递”,Python 使用的是 传对象引用 (Pass by Object Reference)。
- 不可变对象 (Immutable Objects)
如int,float,str,tuple,当你向函数传入这些对象并尝试修改时,实际上是创建了一个新的对象,原对象不会改变。 - 可变对象 (Mutable Objects)
如list,dict,set,如果你在函数内部修改了传入的可变对象(例如使用.append()),原对象会发生改变。
类中的参数传递
在面向对象编程中,参数通常通过构造函数
__init__ 传入,用于初始化对象的属性。
class User:
def __init__(self, username, email):
self.username = username # 将传入的参数赋值给实例属性
self.email = email
user1 = User("coder_jack", "jack@example.com")
命令行参数传递
当你从终端(Terminal/CMD)运行 Python 脚本时,需要通过命令行向程序传递参数。
-
使用
sys.argv(基础方式)sys.argv是一个列表,包含了命令行传递的所有参数。import sys # 运行 python script.py hello 123 # sys.argv[0] 是脚本名称 # sys.argv[1] 是 "hello" print(f"参数列表: {sys.argv}") -
使用
argparse模块 (专业方式)
对于复杂的工具类脚本,推荐使用内置的argparse模块,它支持自动生成帮助文档、类型检查和默认值设置。import argparse parser = argparse.ArgumentParser(description="示例脚本") parser.add_argument("--name", type=str, help="输入姓名") parser.add_argument("--count", type=int, default=1, help="重复次数") args = parser.parse_args() print(f"Hello {args.name} " args.count)
总结对比
| 传递方式 | 适用场景 | 特点 |
|---|---|---|
| 位置参数 | 参数较少且顺序固定 | 简单直接 |
| 关键字参数 | 参数较多或顺序不确定 | 提高代码可读性 |
| `argskwargs` | 编写装饰器或通用接口 | 极高的灵活性 |
sys.argv |
简单的脚本运行 | 仅限字符串,需手动转换类型 |
argparse |
专业的命令行工具 | 功能强大,支持类型检查和帮助信息 |
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/489760.html



