python中你不知道的 (*) 号用法

206 阅读3分钟

写在前面

Python 中的星号(*)是一个功能强大的符号,它远不止简单的乘法运算符。它在多种上下文中扮演着不同的角色,理解其多样的用法对于编写高效、优雅的 Python 代码至关重要。本文将深入探讨*符号在Python中的各种用法,力求覆盖你可能不知道的细节和技巧。  许多 Python 初学者只了解其在算术运算中的作用,而忽略了它在参数传递、解包、迭代器等方面的强大功能。本文将通过大量的代码示例,帮助你全面掌握*符号的精髓。

常见用法

让我们从最常见的用法开始,逐步深入到一些比较高级的应用场景。

1. 算术运算符:

这是*最基本的用法,用于执行乘法运算。这部分相信大家都很熟悉,这里就不展开赘述了。

a5
b10
result = a * b  # result = 50
print(result)

2. 参数传递中的*args:

在函数定义中,*args允许你传递任意数量的位置参数。这些参数会被打包成一个元组。这在处理参数数量不确定或需要灵活处理参数的场景下非常有用。

def my_sum(*args):
    total = 0
    for num in args:
        total += num
    return total

print(my_sum(123))  # Output: 6
print(my_sum(1020304050))  # Output: 150

*args 的名称并非强制规定,你可以使用其他的名称,例如 *numbers*values 等,关键在于星号 *

3. 参数传递中的kwargs:

*args类似,**kwargs允许你传递任意数量的关键字参数。这些参数会被打包成一个字典。这在需要处理命名参数的场景下非常有用。

def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}{value}")

print_kwargs(name="Alice", age=30, city="New York")
# Output:
# name: Alice
# age: 30
# city: New York

同样,**kwargs 的名称也不是强制的,你可以使用其他名称,例如 **params**options 等,关键在于双星号 **

4. 解包序列:

* 可以用于解包序列(例如列表、元组)并将元素传递给函数或其他结构。

my_list = [123]
print(*my_list)  # Output: 1 2 3

def my_func(a, b, c):
    print(a, b, c)

my_func(*my_list) # Output: 1 2 3

这在处理多个变量时非常方便,避免了冗长的代码。

5. 解包字典:

** 可以用于解包字典,并将键值对传递给函数或其他结构。

my_dict = {"a"1"b"2"c"3}
print(**my_dict) # This will raise a SyntaxError.  You need to use it within a function call or similar.

def my_func2(a, b, c):
    print(a, b, c)

my_func2(**my_dict) # Output: 1 2 3

6.  矩阵乘法 (NumPy):

在NumPy中,* 用于进行元素级的矩阵乘法,而不是矩阵乘法。  要进行矩阵乘法,需要使用 @ 运算符 (Python 3.5+) 或 numpy.dot() 函数。

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

print(a * b)  # Element-wise multiplication: [[ 5 12], [21 32]]
print(a @ b)  # Matrix multiplication: [[19 22], [43 50]]
print(np.dot(a, b)) # Matrix multiplication: [[19 22], [43 50]]

7.  文件路径操作:

在处理文件路径时,* 可以用作通配符,匹配任意数量的字符。

8.  正则表达式:

在正则表达式中,* 表示匹配零个或多个前面的字符。

写在最后

本文详细介绍了 Python 中*符号的多种用法,从基本的算术运算到高级的参数传递和解包操作。  熟练掌握这些用法,能够显著提高你的 Python 编程效率,编写出更简洁、更易读的代码。  记住,* 和 ** 的力量在于它们处理可变数量参数和解包序列的能力,这在构建灵活且可重用的函数和代码结构中至关重要。  希望本文能帮助你更好地理解和应用 Python 中这个强大的符号。  继续探索,你将会发现更多*符号的妙用! 测试新人可以学习《测试人的 Python 工具书》书籍《性能测试 JMeter 实战》书籍