【学习心得】Python函数参数中的两个特殊分隔符

Python函数参数中确实有两个特殊的分隔符:

  • / :仅位置参数 ,放在 / 之前的参数只能按位置传递。
  • * :仅关键字参数 ,放在 * 之后的参数只能按关键字传递。

他们可以单独使用,也可以组合使用,完整语法如下

python 复制代码
def func(pos_only, /, normal, *, kw_only):
    pass
区域 传参方式 示例
a, b 只能按位置 func(1, 2, ...)
c, d 位置或关键字均可 func(1, 2, 3, 4, ...) 或 func(1, 2, c=3, d=4, ...)
e, f 只能按关键字 ..., e=5, f=6)

(一)/ 之前仅位置参数

/ 之前的参数只能使用位置传参禁止使用关键字传参。 它在Python3.8版本引入。

python 复制代码
def greet(name, /, greeting="Hello"):
    print(f"{greeting}, {name}!")

# 正确
greet("Alice")                # Hello, Alice!
greet("Alice", "Hi")          # Hi, Alice!
greet("Alice", greeting="Hi") # Hi, Alice!

# 错误!name 是仅位置参数
greet(name="Alice")           # TypeError: greet() got some positional-only arguments passed as keyword arguments: 'name'

(二)* 之后仅关键字参数

* 之后的参数必须使用关键字传参。

python 复制代码
def create_user(name, *, age, email=None):
    ...

# 正确
create_user("Alice", age=30)
create_user("Alice", age=30, email="a@b.com")

# 错误!age 和 email 是仅关键字参数
create_user("Alice", 30)              # TypeError: takes 2 positional arguments but 3 were given
create_user("Alice", 30, "a@b.com")   # 同上

【注】/ 和 * 本身不是参数,它们只是分隔符。/ 不能在 * 后面。lambda 不支持 /,但 lambda 支持 *

相关推荐
BaiPeter23 分钟前
ZPL文件预览
开发语言·c++
曲径海盗34 分钟前
【Python 学习第 53 天】列表基础
python·学习笔记·编程入门
Dumbness1 小时前
群里 @ 机器人发"查订单",指令一条都没命中:微信群机器人在路由前漏掉的几步归一化
python·微信
用户1614840955451 小时前
用 M4 Pro 跑羽毛球视频 AI 分析(二):TrackNet MPS 加速 3.2 倍、卡尔曼滤波补漏与自动回合剪辑
python
用户4019925568611 小时前
基于对话树回溯的社媒评论流买方意图识别与噪音过滤实践
python
用户0332126663672 小时前
使用 Python 加密或解密 PDF 文档
python
小七-七牛开发者2 小时前
让 Go 走得更远:用 LLGo 打通 Go 与 C/C++/Python 生态
python·编程·编译器·llvm·llgo
CyrusYiVPP3 小时前
实测 Ollama 本地部署:我用 Python 搓了个离线问答机器人,Qwen4 27B 一到换个模型名就能用
人工智能·python
2601_967980114 小时前
Python中flatten( )函数及函数用法详解
python·numpy·数组操作·flatten函数·列表处理
xbzb4 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo