zoukankan      html  css  js  c++  java
  • Python中*和**的使用

    Python中***是两个非常有趣的操作符,*对应列表或元祖,**则对应字典,主要有以两类功能。

    1. 在函数参数或赋值中接受不确定数量的位置参数和关键字参数。

    位置参数指按顺序传入的参数,如add(1,2,3), 关键字参数指以键值对传入的参数如add(a=1,b=2,c=3)

    def  func(*args, **kwargs):
        print("args接收所有位置参数并得到一个元祖变量", type(args), args)
        print("kwargs接收所有的关键字参数并得到一个字典", type(kwargs), kwargs)
    
    func(1, 2, 3, a=4, b=5, c=6)
    

    在函数中使用*args和**kwargs可以使得函数可以接受任意数量的位置参数和关键词参数。

    1. 在变量赋值中*同样可用于保留或抛弃任意数量的参数,示例如下
    a, *_, c = [1,2, 3,4,5,6]
    print(a, c)
    print(_, type(_))
    

    _也算一个变量,一般我不需要使用的变量可用_表示,*_则可以接收第一个和最后一个之外的任意多个变量,结果是个元祖。
    3. 列表元祖和字典拆包
    如果我们定义l = [1,2,3]那么l1个列表变量,如果我们需要里面的3个值1,2,3,就可以使用*l将其拆开。

    • l: 1个变量, 列表变量
    • *l:3个值
      如我们有个函数如下:
    def add(a,b,c):
          print(a+b+c)
    

    怎么样能把l中的3个数据不通过索引直接传入函数呢?就可以想下面一样解包直接传入

    l = [1,2,3]
    def add(a,b,c):
          print(a+b+c)
    
    add(*l)  # *l 就相当于add(1,2,3)
    

    字典的拆包使用**,即把一个字典变量拆成多个键值对,示例如下。

    data = {"a": 1, "b": 2, "c": 3}
    def add(a,b,c):
          print(a+b+c)
    
    add(**data)  # 相当于add(a=1,b=2,c=3)
    
  • 相关阅读:
    《学习要像加勒比海盗》读书摘录
    【转载】关于软件测试的几点思考
    黑客与画家 摘录
    基于Jenkins的持续集成CI
    重新开始,整装出发
    java重写equals方法需要注意的几点
    《Google软件测试之道》摘录
    Using sql azure for Elmah
    Invalid object name ‘sys.configurations’. (Microsoft SQL Server, Error: 208)
    Cannot install ubuntu or other linux flavours on citrix Xen server
  • 原文地址:https://www.cnblogs.com/superhin/p/13837849.html
Copyright © 2011-2022 走看看