您的位置:首页 > 编程语言 > Python开发

【python】python参数中的星号*, **

2013-03-04 10:03 239 查看
分两类。
一是作为函数定义时,一类是函数调用时。

一个 *   对应一个元组;
两个 **  对应一个字典;

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

当函数定义时:

一个 *   表示此函数接受的参数为一个元组;
两个 **  表示此函数接受的参数是一个字典;

举例:
def nostar(a):
    print a

def onestar(*a):
    print a

def twostar(**a):
    print a

nostar(1)
onestar(1,2,3)
twostar(a=1,b=2,c=3)
上面的调用是正确的调用。

下面是不正确的调用:
nostar(1,2,3)
nostar(a=1,b=2,c=3)
onestar(a=1,b=2,c=3)
twostar(1, 2, 3)

nostar 定义只接受一个参数,则它只能明确接受一个参数,不允许可变参数,不管是传1,2,3的元组给它,还是传a=1,b=2这样的字典给它,都是错误的用法。编译器会访回一个错误。
同样地,onestar定义接受一个元组,表示允许接受可变参数。但它只能接受像1,2,3这样的元组,而无法理解a=1,b=2类似这样的字典。
twostar定义为接受一个字典,表示允许key=value这样的可变参数。如果只传1,2,3这样的元组给它,同样报错。

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

当函数调用时:
* 号起了自动拆封参数的作用。

一个 *   表示对一个元组参数进行拆封;
两个 **  表示对一个字典参数进行拆封;

举例:
def test(a, b, c):
print a, b, c

test(1,2,3)

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

y={'a':1, 'b':2, 'c':3}
test(**y)

通过上面的例子你就明白了。
x是一个列表,直接传给test 函数是会报错的。因为test 定义为接受三个参数。而你传给它的竟是一个列表,显然不行。因此,你通过在前面加* 号,python会自动帮你进行参数拆分。 两个** 号也是类似一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: