一文了解 “*” 星号在 Python 中的多种用法

大多数 Python 程序员都熟悉使用星号进行乘法运算和幂运算,但在本文中,您将了解星号的隐藏用法。

* 和 **

“*” 用作乘法运算符,而 “**” 用作幂运算符。

>>> a = 2
>>> b = 3
>>> a * b
6
>>> a ** b
8

解包

使用 * 从列表/元组/集合中解压缩元素。假设我们要将列表的第一个元素分配给 a,将其余元素分配给 b。通常,我们将使用切片来实现这一点。

n = [i for i in range(1, 6)]
a = n[0]
b = n[1:]
print(a, b)

# 输出
1 [2, 3, 4, 5]

如果使用 * 运算符解包,一行代码即可实现。

n = [i for i in range(1, 6)]
a, *b = n
print(a, b)

还可以处理元组和集合,就像处理列表一样。

>>> a, *b, c = (1, 2, 3, 4, 5)
>>> print(a, b, c)
1 [2, 3, 4] 5
>>> a, *b, c = {1, 2, 3, 4, 5}
>>> print(a, b, c)
1 [2, 3, 4] 5

还可以嵌套解包。

n = ["abc", "def", "ghi", "jkl"]
[[x, *y], *z] = n
print(x)
print(y)
print(z)

# 输出:
a
['b', 'c']
['def', 'ghi', 'jkl']

使用 ** 解包字典。

d = {"a":1, "b":2, "c":3}
str1 = "a是:{a};b是:{b};c是:{c}".format(**d)
print(str1)

# 输出:
a是1b是2c是3

函数中解包

"*" 可以在函数参数中解包可迭代对象。如果我们输出一个列表的所有元素,一般情况下考虑使用循环遍历,如果使用 * 将更容易。

list1 = [1, 2, 3, 4, 5]
print(*list1)

# 输出:
1 2 3 4 5

同样,使用 “**” 解包字典。

def myFun2(a,b,c):
    print("a:",a)
    print("b:",b)
    print("c:",c)
dict1={'a':10,'b':20,'c':30}
myFun2(**dict1)

# 输出:
a: 10
b: 20
c: 30

函数可变参数

def cheng(x,y):
    return x*y
print(cheng(2,3))

在上面的程序中,我们定义了一个带有两个参数的函数。我们在调用函数时传递两个,我们得到两个数字的乘积作为输出。

如果我们需要计算三个数字的乘积,该怎么办?如果尝试向函数添加额外的参数print(cheng(2,3)),程序将返回错误。

当我们不确定函数的参数数量时,我们使用 *args 作为参数。Python允许我们将可变数量的参数传递给函数。

def cheng(*args):
    c=1
    for n in args:
        c=c*n
    return c

print(cheng(2,3)) #输出6

print(cheng(2,3,4))  #输出24

print(cheng(2,3,4,5))  #输出120

**kwargs 参数允许我们将字典类型的键值对参数传递给函数。

def myFun(**kwargs):
    for i in kwargs:
        print(i,'-',kwargs[i])

myFun(a=10, b=20, c=30, d=40)

# 输出:
a - 10
b - 20
c - 30
d - 40

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!