python——*和**

python中’*‘和’**'的使用分两个方面,一个是计算,另一个是参数传递过程中元素的打包解包


计算中的运用
'*‘和’**'在python中最常见的作用分别是‘相乘’和‘乘幂’,如下:
>>> a  = 2
>>> b = 3
>>> c = 5*6
>>> d = 4**3
>>> e = a*b
>>> f = a**b

需要注意的是在numpy中星号和双星号对于array和matrix是不同的,参见Numpy的array与Python的list的异同以及numpy的array与matrix的异同。简单来说星号和双星号对于array都是点乘,对于matrix都是矩阵乘。

参数传递中的打包和解包
对函数传递的参数进行打包(打包成元组tuple或字典dictionary)和拆解(分解成单个元素),其中元组tuple的打包和解包使用单星号‘*’,字典dictionary的打包和拆解使用‘**’。
注:非关键字参数和关键字参数1

打包

打包就是将传递给函数的任意多个(也可以是零个)非关键字参数/关键字参数打包成一个元组/字典(元组只能接收非关键字参数,字典只能接收关键字参数)
元组打包的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_pack(a, *b):
    print(a)
    print(b)
tuple_pack(1,2,3,4,5)

输出的结果是:
(2,3,4,5)

在该例子中,‘*b’这个位置可以接收任意多个(也可以是零个)非关键字参数,并将收集到的参数转换成一个元组。
字典打包的例子

#!/usr/bin/env python
#coding=utf-8
def dictionary_pack(a, **b):
    print(a)
    print(b)
dictionary_pack(1,one=1,two=2,three=3,four=4)

输出的结果是:

{'four':4,'one':2,'three':4,'two':3}

在该例子中,‘**b’这个位置可以接收任意多个(也可以是零个)关键字参数,并将收集到的参数转换成一个字典。
元组和字典混合的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary_pack(*a, **b):
    print(a)
    print(b)
tuple_dictionary_pack(1,2,3,one=2,two=2)

输出的结果是:

(1,2,3)
{'one':4,'two':5}

在该例子中,‘*a’这个位置负责接收任意多个非关键字参数,‘**b’这个位置可以接收任意多个关键字参数,注意二者在函数定义中的顺序不能颠倒。

拆解

拆解就是将传递给函数的一个列表、元组或字典拆分成独立的多个元素然后赋值给函数中的参变量(包括普通的位置参数,关键字参数,元组也即‘*’非关键字参数,字典也即‘**’关键字参数)。在解字典时会有两种解法,一种使用‘*’解,解出来传给函数的只有键值(.key)另一种是用**解,解出来的是字典的每一项。
位置变量和元组混合拆解的例子

#!/usr/bin/env python
#coding=utf-8
def variable_tuple_unpack(a,b,c,*d):
    print(c)
    print(d)
ee = [1,2,3,4,5]
variable_tuple_unpack(*ee)

输出的结果是:

(4,5)

元组和字典混合的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary_unpack(*a,**b):
    print(a)
    print(b)
ee = (1,2,3)
ff = {'one':1,'two':2,'three':3} 
tuple_dictionary_unpack(*ee,**ff)

输出的结果是:

(1,2,3)
{'one':1,'three':3,'two':2}

字典的键值解成元组的例子

#!/usr/bin/env python
#coding=utf-8
def tuple_dictionary(*a):
    print(a)
ff = {'one':1,'two':2,'three':3} 
tuple_dictionary(*ff)

输出的结果是:

('one','three','two')
1
非关键字参数指的就是位置参数,在函数参数传递中根据顺序对变量赋值;关键字参数可以根据变量的关键字乱序赋值,关键字参数也会在函数定义中赋予初值。另外,非关键字参数不可以通过关键字赋值,但是关键字参数可以通过位置参数赋值;而且在函数定义时,关键字参数后不能有非关键字参数。 ↩︎
————————————————
版权声明:本文为CSDN博主「xiaoquinNUDT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaoqu001/article/details/78823498

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值