社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python函数参数匹配模型通用规则keyword-only参数

若数 • 6 年前 • 480 次点击  
阅读 1

Python函数参数匹配模型通用规则keyword-only参数

概述

Python3对函数参数的排序规则更加通用化了,即Python3 keyword-only参数,该参数即为必须只按照关键字传递而不会有一个位置参数来填充的参数。该规则在处理人一多个参数是很有用的。

keyword-only

kword_only(1, 2, 3, c=4)
print('-' * 20)
kword_only(a=1, c=3)
复制代码

示例结果:

1 (2, 3) 4
--------------------
1 () 3
复制代码

*args之后的参数都需要在调用中使用关键字的方式传递,否则会抛出异常。

def kword_only(a, *b, c):
    print(a, b, c)


kword_only(1, 2, 3)
复制代码

异常结果:

    kword_only(1, 2, 3)
TypeError: kword_only() missing 1 required keyword-only argument: 'c'
复制代码

我们也可以在参数列表中使用一个*字符,表示函数不会接受变量长度的参数列表,而是要求*后面的参数都需要使用关键字参数的方式传递。

def kword_only(a, *, b, c):
    print(a, b, c)


kword_only(1, b=2, c=3)
print('-'*20)
kword_only(b=2, c=3, a=1)
复制代码

示例结果:

1 2 3
--------------------
1 2 3
复制代码

我们可以看到a可以利用位置参数进行传递,但是bc必须通过关键字参数传递,否则就会抛出异常。

def kword_only(a, *, b, c):
    print(a, b, c)


kword_only(1, 2, 3)
复制代码

异常结果:

    kword_only(1, 2, 3)
TypeError: kword_only() takes 1 positional argument but 3 were given
复制代码

当然我们,可以通过对keyword-only参数使用默认值,这样例中的a仍可以通过位置参数或者关键字参数传递,而bc就是可选的了,当然如果需要传递的话仍然是要利用关键字参数进行传递的。

def kword_only(a, *, b=2, c=3):
    print(a, b, c)


kword_only(1)
print('-'*20)
kword_only(a=1)
print('-'*20)
kword_only(b=22, c=33, a=11)
复制代码

示例结果:

1 2 3
--------------------
1 2 3
--------------------
11 22 33
复制代码
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34350