在python函数调用中对**参数感到困惑

这个问题在这里已经有了答案:

  • **(双星/星号)和*(星号/星号)对参数做什么? 15个答案

  • if neg:
    

    那条线是越野车。 它应该是:

    if options["neg"]:
    

    函数如何知道值何时结束以及何时开始?

    未命名的值以*values 。 关键字参数进入**options


    你犯了一个小错误。 改变你的代码到下面,它应该工作。 只需从options字典中获取"neg"的值( values包含未命名的参数, options包含关键字参数)

    >>> def sum(*values, **options):
            s = 0
            for i in values:
                s = s + i
            if "neg" in options:
                if options["neg"]:
                    s = -s
            return s
    
    >>> s = sum(1, 2, 3, 4, 5, neg=True)
    >>> s
    -15
    >>> sum(1, 2, 3, 4, 5)
    15
    >>> sum(1, 2, 3, 4, 5, neg=True)
    -15
    >>> sum(1, 2, 3, 4, 5, neg=False)
    15
    

    尽管,正如@glglgl指出的那样,将代码更改为以下代码会将if语句合并为一个。

    >>> def sum(*values, **options):
        s = 0
        for i in values:
            s = s + i
        if options.get("neg", False):
                s = -s
        return s
    

    如何get(...)工作?

    如果options字典没有键"neg" (由第一个if条件处理),那么get(...)返回False的默认值,并且s不是否定的,如果options包含"neg" ,则返回值,在这种情况下,取决于字典中的值, s被否定。

    链接地址: http://www.djcxy.com/p/9071.html

    上一篇: Confused about ** parameters in python function calls

    下一篇: Python function argument *x, what does it mean?