zoukankan      html  css  js  c++  java
  • Python中的*arg和**kwarg

    一个简单的函数

    首先我们可以定一个简单的函数, 函数内部只考虑required_arg这一个形参(位置参数)

    def exmaple(required_arg):
        print required_arg
    
    exmaple("Hello, World!")
    
    >> Hello, World!

    那么,如果我们调用函数式传入了不止一个位置参数会出现什么情况?当然是会报错!

    exmaple("Hello, World!", "another string")
    
    >> TypeError: exmaple() takes exactly 1 argument (2 given)

    定义函数时,使用*arg和**kwarg

    *arg和**kwarg 可以帮助我们处理上面这种情况,允许我们在调用函数的时候传入多个实参

    def exmaple2(required_arg, *arg, **kwarg):
        if arg:
            print "arg: ", arg
    
        if kwarg:
            print "kwarg: ", kwarg
    
    exmaple2("Hi", 1, 2, 3, keyword1 = "bar", keyword2 = "foo")
    
    >> arg:  (1, 2, 3)
    >> kwarg:  {'keyword2': 'foo', 'keyword1': 'bar'}

    从上面的例子可以看到,当我传入了更多实参的时候

    • *arg会把多出来的位置参数转化为tuple
    • **kwarg会把关键字参数转化为dict

    再举个例子,一个不设定参数个数的加法函数

    def sum(*arg):
        res = 0
        for e in arg:
            res += e
        return res
    
    print sum(1, 2, 3, 4)
    print sum(1, 1)
    >> 10
    >> 2

    当然,如果想控制关键字参数,可以单独使用一个*,作为特殊分隔符号。限于Python 3,下面例子中限定了只能有两个关键字参数,而且参数名为keyword1keyword2

    def person(required_arg, *, keyword1, keyword2):
        print(required_arg, keyword1, keyword2)
    
    person("Hi", keyword1="bar", keyword2="foo")
    >> Hi bar foo

    如果不传入参数名keyword1keyword2会报错,因为都会看做位置参数

    person("Hi", "bar", "foo")
    
    >> TypeError: person() takes 1 positional argument but 3 were given

    调用函数时使用*arg和**kwarg

    直接上例子,跟上面的情况十分类似。反向思维。

    def sum(a, b, c):
        return a + b + c
    
    a = [1, 2, 3]
    
    # the * unpack list a 
    print sum(*a)
    >> 6
    def sum(a, b, c):
        return a + b + c
    
    a = {'a': 1, 'b': 2, 'c': 3}
    
    # the ** unpack dict a
    print sum(**a)
    >> 6
  • 相关阅读:
    C/S架构引用Lodop 如何在C#调用web打印控件Lodop
    Lodop打印设计(PRINT_DESIGN)里的快捷键
    Lodop打印控件中PRINT_INITA()和PRINT_PAGESIZE()宽高
    LODOP打印控件关联输出各内容
    如何判断使用的是Lodop还是C-Lodop
    Lodop代码设置打印机等信息后 设置预览可重选
    Lodop打印控件输出页码(超文本和纯文本页码)
    PhotoShop不用魔棒、钢笔 建立较平整的选区 P进电脑屏幕里
    uniq命令详解
    sort命令详解
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/8650616.html
Copyright © 2011-2022 走看看