Python函数参数类型*、**的区别
刚开始学习python,python相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析,不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来说理解起来比较轻松。只是函数部分参数的"*"与"**",闭包等问题,着实令人迷糊了一把,弄清概念后写下此文记录下来,也希望本文能够帮助其他初学者。
所以本文是一篇学习笔记,着重于使用的细节和理解上,首先分别介绍了函数各种参数类型在调用和声明时的区别,及其在混用时需要注意的一些细节,之后讲了闭包相关的内容。如果有不对的地方欢迎指正。
函数参数不带“*”,"*"与"**"的区别
理解这个问题得关键在于要分开理解调用和声明语法中3者得区别.
函数调用区别
1.不同类型的参数简述
#这里先说明python函数调用得语法为:
func(positional_args,keyword_args, *tuple_grp_nonkw_args,**dict_grp_kw_args) #为了方便说明,之后用以下函数进行举例 deftest(a,b,c,d,e): printa,b,c,d,e
举个例子来说明这4种调用方式得区别:
#------------------------------- #positional_args方式 >>>test(1,2,3,4,5) 12345
#这种调用方式的函数处理等价于 a,b,c,d,e=1,2,3,4,5 printa,b,c,d,e
#------------------------------- #keyword_args方式 >>>test(a=1,b=3,c=4,d=2,e=1) 13421
#这种处理方式得函数处理等价于 a=1 b=3 c=4 d=2 e=1 printa,b,c,d,e
#------------------------------- #*tuple_grp_nonkw_args方式 >>>x=1,2,3,4,5 >>>test(*x) 12345