前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中函数位置参数与关键字参数

python中函数位置参数与关键字参数

作者头像
qsjs
发布2020-06-09 10:42:36
1.3K0
发布2020-06-09 10:42:36
举报
文章被收录于专栏:MyPanda的学习笔记

Python中函数的参数依照不同的方式,可以有不同的分类,这里以“位置参数”与“关键字参数”两类进行讨论.

A. 区分位置参数和关键字参数:

在定义函数的时候,一般有两种方式来指定参数,比如python的内置工厂函数int(x, base=10) 就包含了两种不同的参数,第一个参数 x, 第二个参数 base, 这个参数还有个默认值10. 参数x就是位置参数,而参数base就是关键字参数;所以关键字参数通常是以“key=value”的方式出现在函数的定义当中的,而位置参数则只有参数的名字出现;据此就可以识别位置参数和关键字参数

B. 在定义函数时候两种参数的不同点:

关键字参数因为是以"key=value"的方式出现在函数定义时候的参数列表中,并且在函数体中对该参数引用的是key, 所以这个参数在函数的参数列表中的位置无关紧要. 但是位置参数则不同,如果函数定义时候,其参数列表里面全部是位置参数,那么在函数定义的时候,这些参数在参数列表中的位置也无关紧要. 但如果函数定义时候既有位置参数,也有关键字参数,那么 所有的位置参数都必须在关键字参数之前,否则会报: ”SyntaxError: non-default argument follows default argument“ 错误;

C. 在调用函数时候的不同:

调用函数的时候,通常需要传递函数的参数,这个时候,位置参数必须按照匹配的位置进行传递,否则会发生错误,而多个关键字参数之间则没有位置的要求,下面的参数传递是没有问题的:

代码语言:javascript
复制
#!/usr/bin/env python
def calc(str,n1='10',n2='100'):    #函数定义时候的 位置参数必须在关键字参数之前;      
    pass
calc("+",n1=4,n2=199)       #传递给位置参数str的值:"+" 不能写到其他的位置,而 关键字参数n1,n2可以互换位置;
D. 可变长的位置参数以及关键字参数:

在有的情况下,我们函数的参数列表长度是不固定的,典型的是我们使用装饰函数的时候,我们需要传递所有的参数,而这时候参数的个数是不确定的,我们可以用 *args 来表示所有的 匿名位置参数,**kwargs 来表示所有的匿名关键字参数(其中使用名称args, kwargs 是使用习惯使然,当然可以改用其他的名称), args参数的类型是tuple , 其值是所有的匿名位置参数组成的元组, kwargs的类型是 dict, 其值是匿名的每一个关键字参数 以key:value的形式组成的字典. 下面展示一个复杂的参数传递的例子:

代码语言:javascript
复制
#!/usr/bin/env python
def myfunction(n1,n2,s="default value.",m=9,*args,**kwargs):
    print "n1="+str(n1),"n2="+str(n2),"s="+str(s),"m="+str(m),args,kwargs
myfunction(1,2,3,4,5,6,7,8,ps=1)
输出的结果为: 
n1=1 n2=2 s=3 m=4 (5, 6, 7, 8) {'ps': 1}

简单分析下上述的代码:

  1. 函数定义时候的参数列表: 匿名参数总是 在参数列表的最后,并且仍然遵循位置参数在关键字参数的前面,所以 最后两个参数分别是: *args, **kwargs
  2. 在函数调用的时候,传递的参数同样需要遵循 位置参数在前,关键字参数在后的规范,而 向关键字 参数传递值的时候,可以用 key=value的方式,也可以直接用value的方式,所以在这个例子中,变量s 以及m的默认值都被修改了;比如 int("123",8) 与 int("123",base=8) 两种方式都表示传递 给关键字参数 base的值8.,至此,也就不难理解上述的结果了.
本文原创,转载请著名出处
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • A. 区分位置参数和关键字参数:
  • B. 在定义函数时候两种参数的不同点:
  • C. 在调用函数时候的不同:
  • D. 可变长的位置参数以及关键字参数:
  • 本文原创,转载请著名出处
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档