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) 这个顺序,否则程序会报错

  • 相关阅读:
    代码解析&Filter用户授权例子
    session
    软件工程结对作业2
    软件工程结对作业1
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    KMP算法
    哈希表
    Mysql事物隔离级别
  • 原文地址:https://www.cnblogs.com/dbf-/p/11606188.html
Copyright © 2011-2022 走看看