网站首页 > 技术文章 正文
---PYTHON函数参数详解---
在 python 中,函数参数类型丰富且灵活,合理使用不同参数类型可以使代码更简洁、易读和高效。
以下是 python 函数参数类型的详细分类及示例:
一、位置参数 (Positional Arguments)
定义:必须按定义顺序传递的参数。
特点:调用时不可省略,顺序必须与函数定义一致。
示例:
# python
def add(a, b):
return a + b
print(add(3, 5)) # 正确:3 传给 a,5 传给 b
print(add(5, 3)) # 结果不同,顺序敏感
二、默认参数 (Default Arguments)
定义:在函数定义时为参数指定默认值,调用时可省略。
注意:默认值应为不可变对象(如 `None`、数值、字符串等),避免使用可变对象(如列表)导致意外行为。
示例:
# python
def greet(name, greeting = "Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # 输出:Hello, Alice!
greet("Bob", "Hi") # 输出:Hi, Bob!
三、可变位置参数 (*args)
定义:接收任意数量的位置参数,打包为元组。
用途:处理不确定数量的输入。
示例:
# python
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 输出:6
print(sum_all(10, 20, 30, 40))# 输出:100
# 注意sum函数用法sum(iterable, start=0)**详见结尾
四、关键字参数 (**kwargs)
定义:接收任意数量的关键字参数,打包为字典。
用途:处理具名参数或配置选项。
示例:
# python
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=25)
# 输出:
# name: Alice
# age: 25
五、仅限关键字参数 (KeywordOnly Arguments)
定义:在 `*` 或 `*args` 后定义的参数,必须通过关键字传递。
用途:强制提高代码可读性或避免参数歧义。
示例:
# python
def connect(host, *, port=80, timeout=10):
print(f"Connecting to {host}:{port}, timeout={timeout}")
connect("example.com") # 正确:使用默认 port 和 timeout
connect("api.com", port=443, timeout=5) # 正确:显式指定
# connect("localhost", 8080) # 错误:port 必须通过关键字传递
六、仅限位置参数 (PositionalOnly Arguments)
定义:在 `/` 符号前定义的参数,必须通过位置传递(# python 3.8+ 支持)。
用途:限制参数传递方式,避免参数名被滥用。
示例:
# python
def power(x, /, exp=2):
return x ** exp
print(power(3)) # 输出:9 (x=3 必须通过位置传递)
print(power(3, exp=3)) # 输出:27 (exp 可通过关键字传递)
# power(x=3, exp=2) # 错误:x 不能通过关键字传递
七、参数顺序规则
函数定义时参数需按以下顺序排列:
1. 位置参数(或仅限位置参数 `/`)
2. 默认参数
3. 可变位置参数 `*args`
4. 仅限关键字参数 `*`
5. 关键字参数 `**kwargs`
示例:
# python
def func(a, b=0, *args, c, d=1, **kwargs):
pass
# a: 位置参数
# b: 默认参数
# args: 可变位置参数
# c: 仅限关键字参数(无默认值,必须显式传递)
# d: 仅限关键字参数(有默认值)
# kwargs: 关键字参数
八、参数解包
调用函数时,可通过 `*` 和 `**` 解包参数:
`*` 解包可迭代对象为位置参数。
`**` 解包字典为关键字参数。
示例:
# python
def func(a, b, c):
print(a, b, c)
args = [1, 2, 3]
kwargs = {"a": 10, "b": 20, "c": 30}
func(*args) # 输出:1 2 3
func(**kwargs) # 输出:10 20 30
九、常见陷阱
1. 可变默认值问题:
# python
def append_to(element, lst=[]):
lst.append(element)
return lst
print(append_to(1)) # [1]
print(append_to(2)) # [1, 2](默认列表被重复使用!)
修复方法:
# python
def append_to(element, lst=None):
lst = lst or []
lst.append(element)
return lst
2. 参数顺序错误:
# python
# def func(a=1, b): # 语法错误:默认参数不能在位置参数前
def func(a, b=1): # 正确
pass
3.sum(iterable, start=0)
参数1 iterable:必须是一个可迭代对象(如列表、元组、集合等),包含要累加的元素。
参数2 start(可选):累加的初始值,默认为 0。
返回值:从 start 开始,加上 iterable 中所有元素的总和。
例如:
>>> sum([4,5])
9
>>> sum(4,5)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
sum(4,5)
TypeError: 'int' object is not iterable
总结
灵活运用 python 的参数类型,可以写出更简洁、健壮的代码。关键点:
使用 `*args` 和 `**kwargs` 处理可变参数。
通过 `/` 和 `*` 限制参数传递方式。
避免可变对象作为默认值。
注意参数定义的顺序规则。
猜你喜欢
- 2025-06-03 这3个高级Python函数,不能再被你忽略了
- 2025-06-03 python组合函数不允许你还不会的 10 个高效技巧
- 2025-06-03 Python内置函数range(python内置函数大全表)
- 2025-06-03 你不得不知道的10个最危险的Python函数
- 2025-06-03 告别重复,打造你的代码工具箱:Python函数深度解析
- 2025-06-03 30天学会Python编程:6. Python函数编程
- 2025-06-03 python入门到脱坑 函数—函数的调用
- 2025-06-03 Python内置函数指南(python内置函数有哪些)
- 2025-06-03 Python程序员都应该学习掌握的的25个最基本内置函数
- 2025-06-03 python为什么需要函数、类这些概念
- 263℃Python短文,Python中的嵌套条件语句(六)
- 262℃python笔记:for循环嵌套。end=""的作用,图形打印
- 261℃PythonNet:实现Python与.Net代码相互调用!
- 256℃Python实现字符串小写转大写并写入文件
- 255℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 113℃原来2025是完美的平方年,一起探索六种平方的算吧
- 96℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 87℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)