zoukankan      html  css  js  c++  java
  • Python *args & **kwargs

    *args

    *args是可变的positional arguments列表

    *args:将参数打包成元组(tuple)给函数调用

    在函数中用 args 调用

    def test1(*args):
        print(args)
        print(*args)
        test2(args)
        test2(*args)
    
    
    def test2(*args):
        print(args)
    
    
    if __name__ == '__main__':
        test1('a', 'b', 'c')
    
    

    输出结果

    ('a', 'b', 'c')
    a b c
    (('a', 'b', 'c'),)
    ('a', 'b', 'c')
    

    所以 *args 是 3 个字符串:'a', 'b', 'c'
    args 是装着这 3 个字符串的元祖:('a', 'b', 'c')

    **kwargs

    **kwargs是可变的keyword arguments列表
    **kwargs:将参数打包成字典(dict)给函数调用
    在函数中用 kwargs 调用
    示例:

    def test1(**kwargs):
        print(kwargs)
        test2(kwargs=kwargs)
        test2(**kwargs)
    
    
    def test2(**kwargs):
        print(kwargs)
    
    
    if __name__ == '__main__':
        test1(a='a', b='b', c='c')
    
    

    输出结果

    {'a': 'a', 'b': 'b', 'c': 'c'}
    {'kwargs': {'a': 'a', 'b': 'b', 'c': 'c'}}
    {'a': 'a', 'b': 'b', 'c': 'c'}
    

    所以 **kwargs = {a='a', b='b', c='c'}
    注意 **kwargs 并不能直接 print 出来
    kwargs = {'a': 'a', 'b': 'b', 'c': 'c'}

    总结

    当函数内部调用其他以 *args 或 **kwargs 为参数的函数时,传入的参数应当为 *args 或 **kwargs 而不是 args 或 kwargs
    参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是 (arg, *args, **kwargs) 这个顺序,否则程序会报错

  • 相关阅读:
    Linux文件/proc/net/tcp分析
    为什么系统调用会消耗较多资源
    为什么Linux默认页大小是4KB
    为什么Linux需要虚拟内存
    Make 命令教程
    关于同步的一点思考-下
    关于同步的一点思考-上
    Linux下的进程控制块(PCB)
    汇编语言基础:寄存器和系统调用
    内核栈与thread_info结构详解
  • 原文地址:https://www.cnblogs.com/dbf-/p/11606188.html
Copyright © 2011-2022 走看看