【Python】理解python中的*与**

数学运算功能:

例如要计算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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值