zoukankan      html  css  js  c++  java
  • Python函数参数*args和**kwargs

    1. Python中使用*args和**kwargs

    #!/usr/bin/env python3
    # coding: utf-8
    # File: args_kwargs_demo.py
    # Author: lxw
    # Date: 10/9/17 11:16 AM
    """
    Demos for "*args" & "**kwargs" in Python.
    Reference: [Python中如何使用*args和**kwargs](http://python.jobbole.com/83476/)
    """
    
    def func_args(*args):
        print("type(args):{0}	args:{1}
    ".format(type(args), args))
    
    
    def func_kwargs(**kwargs):
        print("type(kwargs):{0}	kwargs:{1}
    ".format(type(kwargs), kwargs))
    
    
    def func_args_kwargs(*args, **kwargs):
        print("type(args):{0}	args:{1}".format(type(args), args))
        print("type(kwargs):{0}	kwargs:{1}
    ".format(type(kwargs), kwargs))
    
    
    def func(arg1, arg2, arg3):
        print("arg1:{0}	arg2:{1}	arg3:{2}".format(arg1, arg2, arg3))
    
    
    def main():
        # 函数定义
        func_args_kwargs(1, 2, 3)
        func_args_kwargs(1, a = 2, b = 3)
        func_args_kwargs(a = 1, b = 2, c = 3)
    
        func_args(1, 2, 3)
        # func_args(1, a = 2, b = 3)    # TypeError: func_args() got an unexpected keyword argument 'a'
        # func_args(a = 1, b = 2, c = 3)    # TypeError
    
        # func_kwargs(1, 2, 3)    # TypeError: func_kwargs() takes 0 positional arguments but 3 were given
        # func_kwargs(1, a = 2, b = 3)    # TypeError
        func_kwargs(a = 1, b = 2, c = 3)
    
        print("---" * 10, "
    ")
    
        # 函数调用
        args  = (1, "two", 3)
        func(*args)
    
        args  = [1, "two", 3]
        func(*args)
        del args[0]
        print(args)
        func("One", *args)
    
        args_dic = {"arg3": 3, "arg1": "1", "arg2": "two"}
        func(**args_dic)
        del args_dic["arg1"]
        print(args_dic)
        func(1, **args_dic)
    
    
    if __name__ == '__main__':
        main()
    else:
        print("Being imported as a module.")
    
    """
    # Output:
    type(args):<class 'tuple'>    args:(1, 2, 3)
    type(kwargs):<class 'dict'>    kwargs:{}
    
    type(args):<class 'tuple'>    args:(1,)
    type(kwargs):<class 'dict'>    kwargs:{'a': 2, 'b': 3}
    
    type(args):<class 'tuple'>    args:()
    type(kwargs):<class 'dict'>    kwargs:{'a': 1, 'b': 2, 'c': 3}
    
    type(args):<class 'tuple'>    args:(1, 2, 3)
    
    type(kwargs):<class 'dict'>    kwargs:{'a': 1, 'b': 2, 'c': 3}
    
    ------------------------------ 
    
    arg1:1    arg2:two    arg3:3
    arg1:1    arg2:two    arg3:3
    ['two', 3]
    arg1:One    arg2:two    arg3:3
    arg1:1    arg2:two    arg3:3
    {'arg3': 3, 'arg2': 'two'}
    arg1:1    arg2:two    arg3:3
    """

    Reference: Python中如何使用*args和**kwargs

    2.  parameters with default values.

    def func_default_value(a=1, b=2, c=3):
        print("a:{0}	b:{1}	c:{2}".format(a, b, c))
    
    def main():
        # func_default_value(b=3, c=1, 2)    # SyntaxError: positional argument follows keyword argumen
        # func_default_value(a=2, 5, c=8)    # SyntaxError: positional argument follows keyword argumen
        func_default_value(2, 5, c=8)    # OK
        func_default_value("a", c=8)    # OK
    """
    # Output:
    a: 2    b: 5    c:8
    a: a    b: 2    c:8
    """
  • 相关阅读:
    Java学习第六篇:集合类
    Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题
    Java学习第四篇:数组,排序,查找
    Java学习第三篇:类的三大特征,抽象类,接口,final关键字
    Java学习第二篇:类,对象,成员属性,成员方法,构造方法,类变量,类方法
    Java学习第一篇:变量,数据类型,运算符,流程控制(简介)
    (转)学习使用Jmeter做压力测试(三)--数据库测试
    (转)学习使用Jmeter做压力测试(一)--压力测试基本概念
    Xcode-项目模板修改
    过程式编程 drawShapes
  • 原文地址:https://www.cnblogs.com/lxw0109/p/python_parameters.html
Copyright © 2011-2022 走看看