前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python - 3.8 新特性之仅位置参数 & 仅关键字参数

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

作者头像
小菠萝测试笔记
发布2021-08-10 10:49:59
8720
发布2021-08-10 10:49:59
举报

前置知识

Python 函数:https://cloud.tencent.com/developer/article/1857029

什么是仅限位置形参

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

仅限位置形参栗子

代码语言:javascript
复制
def test1(a, b, c):
    print(a, b, c)


test1(a=1, b=2, c=3)


def test(a, /, b, c):
    print(a, b, c)


# 正确
test(1, b=2, c=3)
test(*(1,), b=2, c=3)

# 错误
test(a=1, b=2, c=3)


1 2 3
1 2 3
1 2 3

    test(a=1, b=2, c=3)
TypeError: test() got some positional-only arguments passed as keyword arguments: 'a'
  • 报错信息:test() 得到一些作为关键字参数传递的仅位置参数 ‘a'
  • 在 / 形参前的参数只能通过位置参数传递

什么是仅限关键字参数

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

仅限关键字参数栗子

代码语言:javascript
复制
def f1(a, *, b, c):
    return a + b + c


# 正确
f1(1, b=2, c=3)
f1(1, **{"b": 2, "c": 3})

# 错误
f1(1, 2, c=3)


# 输出结果
6
6

    f1(1, 2, c=3)
TypeError: f1() takes 1 positional argument but 2 positional arguments (and 1 keyword-only argument) were given 
  • 报错信息:接受1个位置参数,但提供了2个位置参数(和1个仅限关键字的参数)
  • 在 * 形参后的参数只能通过关键字参数传递

/ 和 * 混合栗子

代码语言:javascript
复制
def f(a, /, b, *, c):
    print(a, b, c)


# 正确
f(1, 2, c=3)
f(1, b=2, c=3)

# 错误
f(a=1, b=2, c=3)
f(1, 2, 3)


# 输出结果
1 2 3
1 2 3
栗子二
代码语言:javascript
复制
def f(a, b, /, c, *, d, e):
    print(a, b, c, d, e)


# 正确
f(1, 2, c=3, d=4, e=5)

# 错误
f(1, 2, 3, 4, 5)

# 输出结果
1 2 3 4 5 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前置知识
  • 什么是仅限位置形参
  • 仅限位置形参栗子
  • 什么是仅限关键字参数
  • 仅限关键字参数栗子
  • / 和 * 混合栗子
    • 栗子二
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档