Вызов нескольких функций с различными параметрами по умолчанию из функции, изменяющей значения по умолчанию - PullRequest
0 голосов
/ 23 мая 2019

У меня есть несколько функций с параметрами по умолчанию, которые вызываются из функции высокого уровня, и я хотел бы иметь возможность изменять определенное количество этих параметров из других функций. Давайте приведем пример

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 Ответ

2 голосов
/ 23 мая 2019

Кажется, проблема в том, что вы звоните 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
...