✍78 单独星号&斜杠做形参

引入

前一段时间在看 fastapi 的一些代码, 时常会看到函数内会带有 * 的参数, 但好像并不用影响参数的传递就没有深究
今天同事问起就查询了一下, 是 Python 中为限制函数传参的一种方式, 定义一种只能以关键字形式来指定的参数 (或者只能是位置参数),从而确保调用该函数的代码读起来会比较明确

一.单独星号 (*) 做形参

* 之后的参数只能是关键字传参

1.正确示例

def test(name, *, age, sex):
    print(name)
    print(age)
    print(sex)


test("shawn", age=18, sex="female")
"""
shawn
18
female
"""

错误示例

def test(name, *, age, sex):
    print(name)
    print(age)
    print(sex)


test("shawn", 18, "female")
"""
TypeError: test() takes 1 positional argument but 3 were given
"""

一.单独斜杠 (/) 做形参

/ 之前的参数只能是位置传参

1.正确示例

def test2(name, age, sex, /, aaa):
    print(name)
    print(age)
    print(sex)
    print(aaa)


test2("shawn", 18, "female", aaa=555)
"""
shawn
18
female
555
"""

2.错误示例

def test2(name, age, sex, /, aaa):
    print(name)
    print(age)
    print(sex)
    print(aaa)


test2("shawn", 18, sex="female", aaa=555)
"""
TypeError: test2() got some positional-only arguments passed as keyword arguments: 'sex'
"""
posted @ 2022-11-10 15:25  给你骨质唱疏松  阅读(45)  评论(0编辑  收藏  举报