zoukankan      html  css  js  c++  java
  • *args和**kwargs

    def foo(*args, **kwargs):
    
      print(args, kwargs)
    1 foo(x=1)
    2 foo(1)
    3 foo({"x": 1})
    4 foo(**{"x": 1})
      dic = {"x": 1}
    5 foo(dic)
    6 foo(**dic)

    结果:

    1 () {'x': 1}
    2 (1,) {}
    3 ({'x': 1},) {}
    4 () {'x': 1}
    5 ({'x': 1},) {}
    6 () {'x': 1}

    args:函数的自变量

    kwargs:keyword args 关键字参数

    如果是在函数调用中

    *args表示将可迭代对象扩展为函数的参数列表,在获取可变数量的参数时特别有用,由于args*前缀,所有多余的参数都会作为一个元组存储在args中。

    def func(*args):
    
      print args
    
    func(1,2,3)等价于func(*(1,2,3))

    **kwargs 表示将字典扩展为关键字参数,由于kwargs的**前缀多余的参数会被认为是一个字典的键/值对。

    def func(**kwargs):
    
      print kwargs
    
    func(a=1,b=2)等价于func(**{'a':1,'b':2})

    当要使函数接收元组或字典形式的参数 的时候,有一种特殊的方法,它分别使用*和**前缀 。这种方法在函数需要获取可变数量的参数 的时候特别有用。
    [注意] 
    [1] 由于在args变量前有*前缀 ,所有多余的函数参数都会作为一个元组存储在args中 。如果使用的是**前缀 ,多余的参数则会被认为是一个字典的健/值对 。
    [2] 对于def func(*args):,*args表示把传进来的位置参数存储在tuple(元组)args里面。例如,调用func(1, 2, 3) ,args就表示(1, 2, 3)这个元组 。
    [3] 对于def func(**args):,**args表示把参数作为字典的健-值对存储在dict(字典)args里面。例如,调用func(a='I', b='am', c='wcdj') ,args就表示{'a':'I', 'b':'am', 'c':'wcdj'}这个字典 。
    [4] 注意普通参数与*和**参数公用的情况,一般将*和**参数放在参数列表最后。

    
    
  • 相关阅读:
    ASP.NET刷新页面的六种方法
    web安全攻防实践能力培养引导
    流程控制 ifwhilefor 语句
    迭代器和生成器
    闭包函数装饰器
    元组字典集合及内置方法
    字符编码与文件操作
    字符类型及内置方法
    初识函数
    递归匿名函数常用的内置方法
  • 原文地址:https://www.cnblogs.com/work115/p/5590964.html
Copyright © 2011-2022 走看看