在调用函数时传给 function(或 method)的值。参数分为两种:

关键字参数 :在函数调用中前面带有标识符(例如 name=)或者作为包含在前面带有 ** 的字典里的值传入。举例来说,3 和 5 在以下对 complex()的调用中均属于关键字参数:

complex(real=3, imag=5)
complex(**{'real': 3, 'imag': 5})

位置参数:不属于关键字参数的参数。位置参数可出现于参数列表的开头以及/或者作为前面带有 * 的 iterable里的元素被传入。举例来说,3 和 5 在以下调用中均属于位置参数:

complex(3, 5)
complex(*(3, 5))

规则:在函数调用中,关键字参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的其中一个参数匹配,它们的顺序并不重要。这也包括非可选参数。不能对同一个参数多次赋值

以下是一些正确错误范例:

#函数定义
def test(arg1, arg2='hello', arg3='world', arg4='nice to meet you'):print(arg2, arg3, arg4)#正确范例
test(1000)                                        # 1个位置参数
test(arg1=1000)                                   # 1个关键字参数
test(arg1=1000, arg2='VOOOOOM')                   # 2个关键字参数
test(arg2='VOOOOOM', arg1=1000)                   # 2个关键字参数
test('a million', 'bereft of life', 'jump')       # 3个位置参数
test('a thousand', arg2='pushing up the daisies') # 1个位置参数,1个关键字参数#错误范例
test()                     # 缺少一个参数
test(voltage=5.0, 'dead')  # 非关键字参数在关键字参数后面
test(110, voltage=220)     # 一个参数传了多个值
test(arg5='John Cleese')   # 对不存在的参数传值

为了确保可读性和运行效率,我们可以对每个参数,使用限制允许的参数传递形式,这样开发者只需查看函数定义即可确定参数项是仅按位置、按位置也按关键字,还是仅按关键字传递。

方法就是用/和*作为分隔符,把三种传递方法的参数分隔开来。

def function(arg1, arg2, /, arg3, arg4, *, arg5, arg6):pass

如上的函数,arg1和arg2是仅限位置参数,arg3和arg4是位置或关键字参数都行,arg5和arg6则是仅限关键字参数。

最后则是官方对于函数参数给出的指导:

  • 如果你希望形参名称对用户来说不可用,则使用仅限位置形参。 这适用于形参名称没有实际意义,以及当你希望强制规定调用时的参数顺序,或是需要同时收受一些位置形参和任意关键字形参等情况。

  • 形参名称有实际意义,以及显式指定形参名称可使函数定义更易理解,或者当你想要防止用户过于依赖传入参数的位置时,则使用仅限关键字形参

  • 对于 API 来说,使用仅限位置形参可以防止形参名称在未来被修改时造成破坏性的 API 变动。

python函数参数那些事,关键字参数与位置参数相关推荐

  1. python可变参数和关键字参数位置_python笔记——函数的参数(位置参数、默认参数、可变参数、关键字参数、命名关键字参数、参数组合)...

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

  2. python中一共有多少个关键字-Python 为什么会有命名关键字参数?

    题主会有这样的疑问是因为对Python函数的参数还了解不多.位置参数也不一定是必传的,事实上在下面你会看到参数是否必传(也就是有无默认值)与它是位置的还是关键字的根本无关.下文黄底图片的例子能充分为你 ...

  3. python的可变参数 *args 和关键字参数**kw

    *args:非关键字参数,传入任意个不需要包含参数名的参数,参数实际以tuple形式传入 **kw:是关键字参数,传入任意个要带参数名的参数,参数实际以dict传入 例子 >>> d ...

  4. python3函数的参数:必选参数(位置参数)、默认参数、可变参数、关键字参数、命名关键字参数

    了解python函数的参数,是阅读各种库和源码的必需技能,请认真学习并掌握. 1.位置参数: def fn1(a):pass def fn2(a,b):pass msg: pass是占位符,当没有具体 ...

  5. Python位置参数、默认参数、可变参数、关键字参数、命名关键字参数、命名位置参数

    前言 定义一个名为temp的函数,参数列表共4个参数 def temp(first,second="Hello World",*args,**kwargs)print(first) ...

  6. python疑问5:位置参数,默认参数,可变参数,关键字参数,命名关键字参数区别...

    1.位置参数 位置参数要求调用时传入函数的参数必须和定义时的位置和个数一致,即一一对应,不可缺省 def func(a,b):sum = a + breturn sum print(func(2,3) ...

  7. 函数的定义以及关键字参数

    函数的定义以及关键字参数 4.6. 定义函数 4.7. 函数定义的更多形式 4.7.1. 参数默认值 4.7.2. 关键字参数 4.6. 定义函数 我们可以创建一个输出任意范围内 Fibonacci ...

  8. python函数定义中没有对参数指定类型、这说明_二级单选-函数和代码复用

    . i. .w. 1 关于递归函数的描述,以下选项中正确的是 A 函数部包含对本函数的再次调用 B 函数比较复杂 C 包含一个循环结构 D 函数名称作为返回值 正确答案: A 2 关于递归函数基例的说 ...

  9. python函数定义和其四种参数_python入门第九课:函数的定义及多种参数传递方式...

    本教程使用的课本是<Python编程:从入门到实践>,作者:[美] Eric Matthes 本节介绍Python中的函数,函数是可以反复使用的一段代码,有了函数能大大简化编程工作量,还能 ...

  10. python函数(5)— 可变参数 *args 和 **kwargs

    1.可变参数*args 和 **kwargs 定义函数时候,参数*args在前,**kwargs在后,*args和**kwargs组合起来可以传入任意的参数. *args参数:可接受任意个位置参数,当 ...

最新文章

  1. 如何利用装饰者模式在不改变原有对象的基础上扩展功能
  2. 如何来理解Python中的字典数据类型
  3. 我终于加上博士大佬的微信!攒了近百个技术问题,一口气解决!(文末有福利)...
  4. 让jquery中的load不缓存方法
  5. 【交通行业】轨迹相似性度量介绍
  6. 虚方法表与动态分派机制详解
  7. linux usb 升级脚本,linux – 使用bash脚本更新CRON
  8. [Java基础]反射获取成员变量并使用练习
  9. mysql修改校对集_MySQL 图文详细教程之校对集问题
  10. 【python】python程序的输入输出以及标识符详细解读
  11. mysql错误:Table XXX is marked as crashed and should be repaire
  12. 谁是元宇宙的基础设施?数据中心助推元宇宙发展
  13. Android 最新所有框架
  14. 读Java 804 - Quick refresher
  15. 使用音频分析工具audacity分析wave文件
  16. 关于应用~试玩,你想知道的都在这儿了----超详细总结(上篇)
  17. 2022.11.05 第六次周报
  18. 学java难不难?java应该怎么学?
  19. 秋招面经汇总(算法工程师,计算机视觉工程师,深度学习工程师,机器学习工程师)
  20. macbook air扩展显示器全屏滑动怎样不一起滑动?

热门文章

  1. Redis 数据持久化的方案的实现
  2. c#队列取值_在队列的开头获取对象– C#中的窥视操作
  3. [转]JS导出PDF
  4. 【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统
  5. mysql之主从复制 简书_MySQL主从复制(传统)
  6. 福利来袭,送你105例C语言实战
  7. 自动摘要php,修改DEDECMS文章自动摘要长度或者取掉文章摘要
  8. 如何用matlab消除谐波,如何在含有整次谐波和非整次谐波的信号中去除整次谐波?...
  9. 密封槽设计标准_哈尔滨轴承 | 超全面机械密封选型
  10. dakai微信小程序 ios_iOSAPP跳转微信小程序