Python 函数参数类型与使用规则详解

背景

Python以其灵活性著称,这种特性在函数参数设计中尤为明显。本文将依据语言规范,系统阐述Python函数所支持的全部参数类型及其应用

小编环境

import sys

print('python 版本:',sys.version.split('|')[0])
#python 版本: 3.11.11

完整函数参数示例1

def func(pos_only=None, /, pos_kw=None, *, kw_only=None):
  1. 仅位置参数 (Positional-only)/ 前面的参数
    标识:使用 / 符号分隔
    特点:只能通过位置传递,不能使用参数名
def func(a, b, /, c):
    # a, b 是仅位置参数
    pass

# 正确调用
func(1, 2, 3)      # a=1, b=2, c=3
func(1, 2, c=3)    # a=1, b=2, c=3

# 错误调用
func(a=1, b=2, c=3)  # TypeError: 不能使用关键字传递a, b
  1. 位置或关键字参数 (Positional-or-keyword) /* 之间的参数
    位置:在 / 之后,* 之前(如果没有 /*,则在所有参数中)
    特点:既可以通过位置传递,也可以通过关键字传递
def func(a, b, c):
    # 传统写法,所有参数都是位置或关键字参数
    pass

# 两种方式都可以
func(1, 2, 3)       # 位置传递
func(a=1, b=2, c=3) # 关键字传递
func(1, b=2, c=3)   # 混合传递
  1. 仅关键字参数 (Keyword-only)* 后面的参数
    标识:使用 * 符号分隔,或者单个 *
    特点:必须使用关键字传递
def func(*, a, b):
    # a, b 是仅关键字参数
    pass

# 正确调用
func(a=1, b=2)

# 错误调用
func(1, 2)  # TypeError: 必须使用关键字参数

完整函数参数示例2

def comprehensive(
    pos_only_1,          # 仅位置参数
    pos_only_2=10,       # 带默认值的仅位置参数
    /,                   # 分隔符
    pos_kw_1,            # 位置或关键字参数
    pos_kw_2=20,         # 带默认值的位置或关键字参数
    *args,               # 可变位置参数
    kw_only_1,           # 仅关键字参数
    kw_only_2=30,        # 带默认值的仅关键字参数
    **kwargs             # 可变关键字参数
):
    pass

# 调用示例
comprehensive(
    1,              # pos_only_1
    2,              # pos_only_2
    3,              # pos_kw_1
    pos_kw_2=4,     # pos_kw_2
    5, 6,           # 进入args
    kw_only_1=7,    # kw_only_1
    kw_only_2=8,    # kw_only_2
    extra1=9,       # 进入kwargs
    extra2=10       # 进入kwargs
)
  1. 可变位置参数*args
def func(a, *args, b=10):
    # args收集所有额外的位置参数
    pass

func(1, 2, 3, 4)  # a=1, args=(2,3,4), b=10
  1. 可变关键字参数**kwargs
def func(a, **kwargs):
    # kwargs收集所有额外的关键字参数
    pass

func(1, x=2, y=3)  # a=1, kwargs={'x':2, 'y':3}

历史相关文章


以上是自己实践中遇到的一些问题,分享出来供大家参考学习,欢迎关注微信公众号:DataShare ,不定期分享干货

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据人阿多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值