可接受任意数量参数的函数
使用 *
参数,可以让一个函数接受任意数量的位置参数
def test(arg, *args):
pass
在上述例子中,args
是一个由除 arg
以外所有位置参数组成的元组
使用 **
参数,可以让一个函数接受任意数量的关键字参数
def test(arg, **kwargs):
pass
在上述例子中,kwargs
是包含被传入进来的关键字参数字典
同时使用 *
和 **
,能够让函数接受任意数量的位置参数和关键字参数
只接受关键字参数的函数
将参数放在 *
参数或者单个 *
后面
def test(arg, *, key):
pass
def other_test(arg, *args, key):
pass
在上述例子中,key
必须为关键字参数
仅限位置形参
使用 /
指明某些函数的形参必须使用仅限位置而非关键字参数的形式
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
在上述例子中,a
,b
为仅限位置形参,c
,d
可以是位置形参也可以是关键字形参,e
,f
必须为关键字形参
小技巧(来自 fastapi)
借助 *
,带有默认值的参数也可以在不带有默认值的参数前面,例如
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
*, item_id: int = Path(..., title="The ID of the item to get"), q: str
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results