【问题标题】:Calling several functions with different default parameters from a function modifying the default values从修改默认值的函数调用具有不同默认参数的多个函数
【发布时间】:2019-10-10 05:07:19
【问题描述】:

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

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 仅传递给以它为参数的函数?

【问题讨论】:

  • 你确定这是实现你想要做的最简单的方法吗?从长远来看,让outerin 作为普通参数并传递它们可能更有意义。否则,如果您希望调用者使用默认参数,他们需要记住 outer 内部调用的内容,以及这些函数的默认参数是什么。这可能比必要的精神压力更大。

标签: python function parameters keyword-argument nested-function


【解决方案1】:

问题似乎是您正在调用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2011-02-20
    • 2011-04-09
    相关资源
    最近更新 更多