从修改默认值的函数中调用具有不同默认参数的多个函数

时间:2019-05-23 15:17:39

标签: python function parameters kwargs nested-function

我有几个带有默认参数的函数,这些函数是从高级函数调用的,我希望能够从其他函数中修改一定数量的那些参数。让我们举个例子

def printing(what, n = 3):
    for _ in range(n):
        print(what)

def printing_number(number, i=3):
    for _ in range(i):
        print(number)

def outer(what, number):
    printing(what)
    printing_number(number)

outer是将要调用的函数,我希望能够放置类似 outer('hello', 4, i = 4),然后它将执行printing('hello', n=3)printing_number(4, i=4)

我尝试对** kwargs进行如下操作:

def printing(what, n = 3):
    for _ in range(n):
        print(what)

def printing_number(number, i=3):
    for _ in range(i):
        print(number)
def outer(what, number, **kwargs):
    printing(what, **kwargs)
    printing_number(number, **kwargs)

但是,它只能与默认参数一起正常使用,如果我为outer('hello',3,i=4)编写代码,则会收到一条错误消息,指出打印收到了意外的参数。

那么,有没有办法将i只传递给以它为参数的函数?

1 个答案:

答案 0 :(得分:2)

问题似乎是您正在调用printing(what, **kwargs)但在函数定义中没有**kwargs关键字的事实。只需将**kwargs添加到您的第一个函数中,一切就可以正常工作

def printing(what, n = 3, **kwargs):
    for _ in range(n):
        print(what)


outer('hello', 4, i = 4)   
# hello
# hello
# hello
# 4
# 4
# 4
# 4