zoukankan      html  css  js  c++  java
  • Python的星号(*)和双星号(**)用法

    ①引言

    在Python中,星号除了用于乘法数值运算和幂运算外,还有一种特殊的用法是在变量前加单个星号或两个星号,实现多参数的传人或变量的拆解。

     

    ②什么是星号变量

    最初,星号变量是用在函数的参数传递上的,在下面的实例中,单个星号代表这个位置接受任意多个非关键字参数,在函数的*b位置上将其转化成元组,

    def one(a,*b):
    	    """a是一个普通传入参数,*b是一个非关键字星号参数"""
    	    print(b)
    one(1,2,3,4,5,6)
    

     out:(2,3,4,5,6)

     

    ③双星号代表这个位置接收任意多个关键字参数,在**b位置上将其转化成字典:

    def two(a=1,**b):
    	    """a是一个普通关键字参数,**b是一个关键字双星号参数"""
    	    print(b)
    two(a=1,b=2,c=3,d=4,e=5,f=6)	 
    

     out:two(a=1,b=2,c=3,d=4,e=5,f=6)

     

    扩展用法单星号变量实例

    单星号变量不仅仅能够用在函数的参数传递中,实际上对一个普通变量使用单星号前缀,能够将这个变量拆分成单个元素,请看下面的实例

     

    如果在变量前面使用单星号,实际上是对变量的一次拆解操作,将变量中单独的元素拆解出来,函数会将这些传入的单个元素保存成一个元组,这就是为什么我们 print(x[0])能够提取第一个元素的原因.

    列表是可以更改的,将列表拆分后传入函数,尝试在函数内部更改第一个元素的值,结果触发了“TypeError”异常,不论传入的参数的原始类型是什么,four(*x)函数在*x的位置接受这些传入的参数后,都会将其保存成”元组”,而元组是不能改变的。

    如果传入了一个字典元素,发现仅输出了字典元素的键,并没有包含值,实际上,单星号是无法读取到字典中的值的,永远只会读取到字典中的键,如果想读取到字典中的值,需要使用双星号 

     

    ⑤扩展用法双星号变量实例

    我们使用单星号拆分了一个字典传递给函数,却只能得到字典的键,下面演示如何使用双星号来获得字典的值:

     
     绿色 1)这里保存成元组

     Ps:注意,使用这种方法将字典传入函数的时候,字典的键的命名要符合python变量的命名规则,通过上面的分析也不难看出,双星号会将字典首先转换成关键字参数的形式,就相当于将字典中的键作为变量命,如果键不符合变量命名规则,会抛出一个"TypeError"异常,大家可以尝试着颠倒一下上面字典中的键和值,使用数字作为键,看看会出现什么问题。

     

    ⑥在一个函数的接收参数中,同时出现"非关键字参数(位置参数)"和"关键字参数"时,可以使用一个单星号来分隔这两种参数

     

    ⑦要在一个函数中包含多种参数的组合,必须遵守这样的顺序:位置参数(必选参数),默认参数,单星号参数或星号分隔符,关键字参数,双星号参数;

    请看下面的实例

     

     

  • 相关阅读:
    来自1068
    耻辱的时间戳(笑哭)
    依然排序
    呵呵
    好吧,第二篇
    来自机房的第一篇博客
    Shader-水流效果
    unity中虚拟摇杆的实现
    (转载)Unity3d中的属性(Attributes)整理
    C#冒泡排序法及优化
  • 原文地址:https://www.cnblogs.com/baxianhua/p/9140354.html
Copyright © 2011-2022 走看看