当前位置:   article > 正文

Python - 3.8 新特性之仅位置参数 & 仅关键字参数

dumps() takes 1 positional argument but 2 positional arguments

前置知识

Python 函数:https://www.cnblogs.com/poloyy/p/15092393.html

什么是仅限位置形参

  • 仅限位置形参是 Python 3.8 才有的新特性
  • 新增了一个函数形参语法 /
  • 添加了它,表示函数形参只能通过位置参数传递,而不能通过关键字参数形式传递

仅限位置形参栗子

  1. def test1(a, b, c):
  2. print(a, b, c)
  3. test1(a=1, b=2, c=3)
  4. def test(a, /, b, c):
  5. print(a, b, c)
  6. # 正确
  7. test(1, b=2, c=3)
  8. test(*(1,), b=2, c=3)
  9. # 错误
  10. test(a=1, b=2, c=3)
  11. 1 2 3
  12. 1 2 3
  13. 1 2 3
  14. test(a=1, b=2, c=3)
  15. TypeError: test() got some positional-only arguments passed as keyword arguments: 'a'
  • 报错信息:test() 得到一些作为关键字参数传递的仅位置参数 ‘a'
  • 在 / 形参前的参数只能通过位置参数传递

什么是仅限关键字参数

  • 和仅位置参数一样,也是 Python 3.8 的新特性
  • 参数只传 * 代表仅关键字参数
  • 添加了它,表示函数形参只能通过关键字参数传递,而不能通过位置参数传递

 仅限关键字参数栗子

  1. def f1(a, *, b, c):
  2. return a + b + c
  3. # 正确
  4. f1(1, b=2, c=3)
  5. f1(1, **{"b": 2, "c": 3})
  6. # 错误
  7. f1(1, 2, c=3)
  8. # 输出结果
  9. 6
  10. 6
  11. f1(1, 2, c=3)
  12. TypeError: f1() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given 
  • 报错信息:接受1个位置参数,但提供了2个位置参数(和1个仅限关键字的参数)
  • 在 * 形参后的参数只能通过关键字参数传递

/ 和 * 混合栗子

  1. def f(a, /, b, *, c):
  2. print(a, b, c)
  3. # 正确
  4. f(1, 2, c=3)
  5. f(1, b=2, c=3)
  6. # 错误
  7. f(a=1, b=2, c=3)
  8. f(1, 2, 3)
  9. # 输出结果
  10. 1 2 3
  11. 1 2 3
栗子二
  1. def f(a, b, /, c, *, d, e):
  2. print(a, b, c, d, e)
  3. # 正确
  4. f(1, 2, c=3, d=4, e=5)
  5. # 错误
  6. f(1, 2, 3, 4, 5)
  7. # 输出结果
  8. 1 2 3 4 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/261391
推荐阅读
相关标签
  

闽ICP备14008679号