Python 星号表达式(starred expression)

一、用于参数传递

出现在函数的参数中的星号表达式 *args 用于将传入的可迭代参数序列解析出来,并存入args中。

def fun1(*args, **kwargs):
    print(args, kwargs)

* 会将传入的参数放入名为args的元组中
** 会将传入的参数放入名为kwargs的字典中

例1:
>>>def f(a, b, c, d):
     print(a, b, c, d, sep = '&')
>>>f(1,2,3,4)
1&2&3&4
>>>f(*[1, 2, 3, 4])
1&2&3&4

* 会将列表[1,2,3,4]中的数字取出来,分别赋给参数a,b,c,d

下面的函数可以实现与上面一样的功能:

def f(*args):
    print(*args, sep='&')

注意print函数中的 args 前面必须加 * 号

例2:用numpy创建一个大小与m相同的随机矩阵:
np.random.randn(*m.shape)

函数randn接收n个可选参数:numpy.random.randn(d0, d1, …, dn)

二、用于 unpack 可迭代的变量

例3:赋值语句中的 * 用于列表数值取出
# example 1
>>> a, *b, c = range(5)
>>> a
0
>>> c
4
>>> b
[1, 2, 3]

# example 2
>>> ecord = ('ACME', 50, 123.45, (12, 18, 2012))
>>> name, *_1, (*_2, year) = record
>>> print(name)
'ACME'
>>> print(_1)
[50,123.45]
>>> print(_2)
[12,18]
>>> print(year)

# example 3
>>> for a, *b in [(1, 2, 3), (4, 5, 6, 7)]:
>>>     print(b)
[2, 3]
[5, 6, 7]
例4:用于递归(列表求和)
def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head
items = [1, 10, 7, 4, 5, 9]
print(sum(items))

注意:*表达式不可单独使用!

错误用法:

>>> *a = range(5)
>>> a = *range(5)
>>> print(*range(5))

正确用法:

>>> *a, = range(5)
[0, 1, 2, 3, 4]
>>> a = *range(5),
(0, 1, 2, 3, 4)
>>> *a,b = range(5)
>>> print(*range(5),)

三、详细语法参见:

1. pep-3132
2. pep-0448

  • 16
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值