python 之单星号(*)与双星号(**)详解

 本章将详细介绍python中*与**操作符的使用场景以及注意事项,并给出示例demo。

1.作为运算符

        *表示乘法运算

        **表示乘方运算

       代码 示例:

#1.* ** 作为运算符
print('\n------运算符测试------')
a = 3*2  #乘法
b = 3**2 #乘方
print("a = ", a)  #输出6
print("b = ", b)  #输出9

执行结果:

2.作为函数形参

        *在python中做函数形参,表示的是一个可变长度的序列,类型为tuple,即将所有参数放入一个元组(tuple)中,被函数使用。

        **在python中做函数形参,表示的是一个可变长度的序列,类型为dict,即将所有的关键字参数,放入一个字典(dict)中, 被函数使用

        *与**作为形参同时出现时,**必须在最后面.

        代码示例:

#2.作为形参
print('\n------形参测试------')
def printx(*arg1, **arg2):
    print("arg1={0}, type:{1}".format(arg1, type(arg1)))
    print("arg2={0}, type:{1}".format(arg2, type(arg2)))

#调用
P1 = printx(1,2, key1=1, key2=2)

代码执行结果:

3.作为函数实参

        在list/tuple/set前加*,会把序列中的所有元素解包成位置参数

        在dict前加*,会把dict的变成位置参数;加**,把字典的键值对变成关键字参数。

        A = (a,b,c)

        B = {“key1 :1, key2:2}

        P3 = Printx(*A)    # 等同于printx(a,b,c)

        P3 = Printx(*A, *B)   #等同于printx(a,b,c,key1,key2)

        P3 = Printx(*A, **B)   #等同于printx(a,b,c,key1=1,key2=2)

        代码示例:

def printx(*arg1, **arg2):
    print("arg1={0}, type:{1}".format(arg1, type(arg1)))
    print("arg2={0}, type:{1}".format(arg2, type(arg2)))


#3.实参测试
print('\n------实参测试------')
A = (1,2,3)
K1 = {'key1':1, 'key2':2}
P2 = printx(*A, *K1)  #注意在dict前加一个*,只把dict的 '键' 作为位置参传递
print('')
P3= printx(*A, **K1)

执行结果:

4. 作为序列解包

        注意序列解包时*解包为list,不再是tuple了

       1. 先对不带*的变量解包,剩余的数据在划分给带*的变量

        x,y,*z = 1,2,3,4,5 #等同于 x=1, y = 2, z= [3,4,5]

        X,*y,z = 1,2,3,4,5 #等同于 x=1, y = [2,3,4], z= 5

       2. 如果左值比右值要多,那么带 * 的变量默认为空列表

        x,y,*z = 1,2 #等同于 x=1, y = 2, z= []  

        x,*y,z = 1,2  #x=1, y = [], z= 2

        3. 单*只解包dict的键, **解包dict键值对

        key_A = {‘key1:1, key2:2}

        key_B = {“key3 :3, key4:4}

        X = {*key_A}  #等同于x= {‘key1’, key2}

        X = {**key_A}  #等同于x= {‘key1:1, key2:2}

        X = {**key_A, **key_B} #等同于组包,x={‘key1:1, key2:2, key3 :3, key4:4} 

        注意:组包时,若键相同,则用后面的键值替换前面的,即最终合并后,为后面的键值对。

代码示例:

        

#4.解包测试
print('\n------解包测试------')
x,y,*z = 1,2,3,4,5
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,*y,z = 1,2,3,4,5
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,*y,z = 1,2
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,y,*z = 1,2
print("x={0}, y= {1}, z={2}".format(x,y,z))

#解包&组包
K2 = {'key3':3, 'key4':4}
K3 = {'key5':5, 'key6':6}
k4 = {**K2, **K3}
print("k4=", k4)

 执行结果:

注意

        在Python中默认的函数参数顺序是:必选参数、默认参数、*args和**kwargs。如下所示:

        def  testFunc(name, age=10, *agrs, **kwargs):

                pass

 整体测试代码:

import torch

#1.* ** 作为运算符
print('\n------运算符测试------')
a = 3*2  #乘法
b = 3**2 #乘方
print("a = ", a)  #输出6
print("b = ", b)  #输出9

#2.作为形参
print('\n------形参测试------')
def printx(*arg1, **arg2):
    print("arg1={0}, type:{1}".format(arg1, type(arg1)))
    print("arg2={0}, type:{1}".format(arg2, type(arg2)))

#调用
P1 = printx(1,2, key1=1, key2=2)

#3.实参测试
print('\n------实参测试------')
A = (1,2,3)
K1 = {'key1':1, 'key2':2}
P2 = printx(*A, *K1)  #注意在dict前加一个*,只把dict的 '键' 作为位置参传递
print('')
P3= printx(*A, **K1)

#4.解包测试
print('\n------解包测试------')
x,y,*z = 1,2,3,4,5
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,*y,z = 1,2,3,4,5
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,*y,z = 1,2
print("x={0}, y= {1}, z={2}".format(x,y,z))

x,y,*z = 1,2
print("x={0}, y= {1}, z={2}".format(x,y,z))

#解包&组包
K2 = {'key3':3, 'key4':4}
K3 = {'key5':5, 'key6':6}
k4 = {**K2, **K3}
print("k4=", k4)

运行结果:

  • 30
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 语言中,单星号操作符 * 和双星操作符 ** 都是非常常见的操作符,它们可以用于不同的地方,有着不同的操作方式。在本文中,我们将详细解释这两个操作符的用法,并结合实例进行说明。 单星号操作符 * : 在Python中,单星号操作符 * 可以用于多种场景,其主要的作用是将可迭代对象拆分成单个的元素。 1.传递参数: 首先,* 可以用于将一个可迭代对象(如列表或字符串)作为函数的参数传递到另一个函数中,这种操作方式通常用于参数不固定的函数。 示例: ``` def add(*args): return sum(args) print(add(1,2,3)) # 输出6 ``` 2.拆分序列: * 还可以用于解包(或拆分)序列类型的数据结构,如列表、元组等,使其变成单个的元素。 示例: ``` num_list = [1, 2, 3, 4] print(*num_list) # 输出1 2 3 4 ``` 3.拼接多个列表: 将多个列表拼接为一个大列表时,也可以使用 * 操作符。 示例: ``` list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] new_list = [*list1, *list2, *list3] print(new_list) # 输出 [1, 2, 3, 4, 5, 6, 7, 8, 9] ``` 双星操作符 ** : 双星操作符 ** 主要用于将字典类型的数据解包(或展开)成关键字参数,这种操作方式通常用于函数或方法的调用。 示例: ``` def add(a,b,c): return a+b+c dict1 = {'a':1,'b':2,'c':3} print(add(**dict1)) # 输出6 ``` 总结: 单星号操作符 * 和双星操作符 ** 在Python中使用非常广泛,掌握它们的使用方式可以大大提高程序开发的效率。我们在函数或方法中经常会看到这两个操作符,只要学会它们的使用方法,就可以轻松地处理函数的参数和返回值,同时也可以方便地操作数据结构中的元素。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值