Python函数传参方式超级大汇总
位置参数
位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致。 见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4
示例1 def func(a,b,c): print("args:",a,b,c) if __name__ == "__main__": func(2,3,4) #输出结果 args: 2 3 4
关键字参数
通过关键字对变量进行赋值,可以对全部关键字进行赋值,这时候位置可以随意改变。见示例2,输出结果与示例1一致。
示例2 def func(a,b,c): print("args:",a,b,c) if __name__ == "__main__": func(c=4,a=2,b=3) #输出结果 args: 2 3 4
也可以对部分关键字进行赋值,这属于位置参数和关键字参数的混用,有关键字的部分必须放在后面,见示例3
示例3 def func(a,b,c): print("args:",a,b,c) if __name__ == "__main__": func(2,c=4,b=3) #输出结果 args: 2 3 4
默认参数
有些函数参数提供了默认值,如果要使用,可不传入,如示例4
示例4 def func(a,b,c=4): print("args:",a,b,c) if __name__ == "__main__": func(2,3) #输出结果 args: 2 3 4
如果不使用其定义的默认值,可自行传入,对其修改,如示例5
示例5 def func(a,b,c=4): print("args:",a,b,c) if __name__ == "__main__": func(2,3,5) #输出结果 args: 2 3 5
命名关键字参数
与普通关键字参数不同,命名关键字参数必须用*进行区分,*后面的参数必须通过关键字传入,见示例6
示例6 def func(a,b,*,c): print("args:",a,b,c) if __name__ == "__main__": func(2,3,c=4) #输出结果 args: 2 3 4
如果不按照关键字传入,则报TypeError的错误,见示例7
示例7 def func(a,b,*,c): print("args:",a,b,c) if __name__ == "__main__": func(2,3,4) #TypeError: func() takes 2 positional arguments but 3 were given
可变参数
如果定义的函数中带有*args或者**args都是属于可变参数方式进行参数传入 *args是以元组的方式收集不匹配的的位置参数,见示例8
示例8 def func(a,b,*c): print("args c:"c) if __name__ == "__main__": func(2,3,4,5,6) #输出结果 args c: (4, 5, 6)
在示例8中,有a,b,c3个形式参数,但是按照位置参数的形式传入了5个参数,最后的3个参数都按照元组的形式(4,5,6)传给了c。 定义函数时候,*args必须放在位置参数后面,否则报TypeError的错误,见示例9。
#示例9 def func(a,*c,d): print("args c:",c,d) if __name__ == "__main__": func(2,3,4,5,6) #TypeError: func() missing 1 required keyword-only argument: 'd'
** args是以字典的形式收集不匹配的位置参数,仅对关键字参数传入有效,见示例10
示例10 def func(a,b,**c): print("args c:",c) if __name__ == "__main__": func(2,3,c=4,d=5,e=6)#输出结果 args c: {'c': 4, 'd': 5, 'e': 6}
在示例10中,参数c收集了以字典的形式收集了后面的3个参数。跟*args一样,函数中的**args必须放在位置参数后面。
再看一个传参方式混合使用的的例子,见示例11。
示例11 def func(a,*b,c=None,**d): print("a:",a) print("b:",b) print("c:",c) print("d:",d) if __name__ == "__main__": func(2,3,4,c=4,d=5,e=6)
输出结果如下所示:
a: 2 b: (3, 4) c: 4 d: {'d': 5, 'e': 6}
从示例11可见,2赋值给a,b以元组的形式收集了3,4,c=4修改了默认参数的值,d以字典的形式收集了4,5,6
前面所说的* args 或者 ** args是出现在函数定义中的,其实在参数传入时候也可以使用使用 * 和**,他们会数据进行解包。如示例12和示例13
示例12 def func(a,b,c): print("a:",a,",b:",b,",c:",c) if __name__ == "__main__": a=(2,3,4) func(*a)#输出结果 a: 2 ,b: 3 ,c: 4
示例13 def func(a,b,c): print("a:",a,",b:",b,",c:",c) if __name__ == "__main__": a={'a':1,'b':2,'c':3} func(**a)#输出结果 a: 2 ,b: 3 ,c: 4
欢迎关注:CVpython,一个专注于分享Python教程和CV算法的公众号
- python 学习笔记3(循环方式;list初始化;循环对象/生成器/表推导;函数对象;异常处理)
- javascript创建函数的20种方式汇总
- python常见的API(预先定义的函数)查询方式
- 各语言函数定义方式(oc/java/C++/python等)
- python函数的四种参数传递方式
- python函数调用时参数传递方式
- Python赋值和函数传值的方式
- Python函数的定义方式与函数参数问题实例分析
- 干货汇总 | 你可能不知道的 Python Web 部署方式总结
- Python中函数的参数传递方式
- Python函数学习之函数的传递方式
- Python下的常用函数汇总:
- python基础函数汇总
- python 函数汇总
- selenium2.0关于python的常用函数汇总
- Python 中类方法、类实例方法、静态方法有何区别,Python 函数调用的时候参数的传递方式是值传递还是引用传递,*args,**kwargs
- Python re 模块findall() 函数返回值展现方式解析
- 详解Python中open()函数指定文件打开方式的用法
- Python--函数参数的传递方式
- python函数缺省值及程序打包方式