Python函数参数类型*、**的区别

485次阅读  |  发布于5年以前

刚开始学习python,python相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析, 不可变对象也如同java得Integer类型,with函数类似新版本C++的特性,总体来说理解起来比较轻松。只是函数部分参数的"*"与"**",闭包等问题,着实令人迷糊了一把,弄清概念后写下此文记录下来,也希望本文能够帮助其他初学者。

所以本文是一篇学习笔记,着重于使用的细节和理解上,首先分别介绍了函数各种参数类型在调用和声明时的区别,及其在混用时需要注意的一些细节,之后讲了闭包相关的内容。如果有不对的地方欢迎指正。

函数参数不带"","" 与 ""的区别
**理解这个问题得关键在于要分开理解调用和声明语法中3者得区别.

函数调用区别

1. 不同类型的参数简述
#这里先说明python函数调用得语法为:

复制代码 代码如下:

func(positional_args, keyword_args,
*tuple_grp_nonkw_args, **dict_grp_kw_args)

为了方便说明,之后用以下函数进行举例

def test(a,b,c,d,e):
print a,b,c,d,e

举个例子来说明这4种调用方式得区别:

复制代码 代码如下:

-------------------------------

positional_args方式

test(1,2,3,4,5)
1 2 3 4 5

这种调用方式的函数处理等价于

a,b,c,d,e = 1,2,3,4,5
print a,b,c,d,e

-------------------------------

keyword_args方式

test(a=1,b=3,c=4,d=2,e=1)
1 3 4 2 1

这种处理方式得函数处理等价于

a=1
b=3
c=4
d=2
e=1
print a,b,c,d,e

-------------------------------

*tuple_grp_nonkw_args方式

x = 1,2,3,4,5
test(*x)
1 2 3 4 5

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8