数学运算功能:
例如要计算2乘3:
print(2*3)
重复功能:
例如我们先要打印[1,1,1],'hahaha’可以使用以下代码实现
print([1]*3) # 输出[1,1,1]
print('ha'*3) # 输出 hahaha
打包:
概念:打包是将多个值捆绑到一个容器中,这个容器可以是元组、列表、字典。
numbers = [1,2,3,4,5]
first, *rest=numbers
print(first) # 输出 1
print(rest) # 输出 [2,3,4,5]
上述代码中,第一个值被传入first,是一个整数,剩下的值都被传入了rest中,是一个列表,这是因为rest前面带有一个*,无论传入多少值都会被打包为一个列表。
将*用于打包还常见于函数的形参:
def print_values(*args):
for arg in args:
print(arg)
print_values(1,2,3)
'''
代码输出:
1
2
3
'''
上述代码中将*args作为函数的参数传入,这意味着无论传入多少参数,都会被打包成一个序列。
如果要在函数形参时使用**,是将关键字参数打包成字典:
def example(**kwargs):
for key, value in kwargs.items():
print(key, value)
example(a=1, b=2, c=3)
'''
代码输出:
a 1
b 2
c 3
'''
kwargs是个字典,字典的key是我们传入的关键字参数的名称,字典的value是我们传入参数的值,
解包:
概念:而解包是打包的反义词,解包是将容器中的值拿出来变成单独的变量。
一个*可以解包序列,将一个序列解包成若干items。通过这点我们可以在传参给函数时候,可以传入一个带*的列表,来达到传入多个参数的目的:
def greet(name, age):
print(name,age)
person = ('Alice', 30)
greet(*person)
# 代码输出:Alice 30
上述代码中,person是一个元组,需要加入*来解包,这个样会将元组解包成’Alice’和30两个值。
当我们合并两个序列时,也可以使用*来灵活完成:
list1 = [1,2,3]
tuple1 = (4,5,6)
merged = [*list1, *tuple1]
print(merged) # 输出:[1, 2, 3, 4, 5, 6]
上述是一个*在解包方面的应用,下面我们看一下**在解包方面的应用,与*的区别是,**操作的是字典,将一个字典解包成函数的关键字参数:
def create_profile(name, age, email):
print(f'name:{name}')
print(f'age:{age}')
print(f'email:{email}')
option = {
'name': 'tony',
'age': 18,
'email': "123@qq.com"
}
create_profile(**option)
'''代码输出:
name:tony
age:18
email:123@qq.com
'''
多个字典的合并也可以用到**:
dict1 = {'a':1, 'b':2}
dict2 = {'c':3, 'd':4}
merged = {**dict1, **dict2}
print(merged) # 输出 {'a': 1, 'b': 2, 'c': 3, 'd': 4}
总结:
*除了数学运算,还可以做重复、打包、解包三件事,通过在不同场景进行打包和解包,我们可以达到处理函数参数、合并序列、合并字典的目的
参考:
https://www.bilibili.com/video/BV1QJ4m1b7tE/?spm_id_from=333.1007.top_right_bar_window_history.content.click