Вызов функции внутри функции и передача ее аргументов (* args) - Python - PullRequest
0 голосов
/ 22 февраля 2019

Я не вижу себя так плохо в python, но я изо всех сил пытаюсь выяснить, что это не так в моем коде.

import numpy as np

x = np.array([[1, 2], [3, 4]])

def func1(x, params, *args):
    x = x.T
    if args[0] == 'condition':
        params['parameter1'] = False
        args = args[1:]
    else:
        params['parameter1'] = True
    return x, params

def func2(x, *args):
    params = {}
    params['parameter1'] = True
    params['parameter2'] = 'solid'
    params['parameter3'] = 200
    x, params = func1(x, params, args[:])
    print(params)
    print(x)
    print(args)

func2(x, 'condition')

Проблема, с которой я сталкиваюсь, заключается в том, что «if» в func1 не выполняется.Python не видит, что args [0] равен строке 'condition', несмотря на то, что я ясно передаю его при вызове func2 в последней строке.Несмотря на то, что мы печатаем длину аргументов перед оператором If, я получаю 1 как признак того, что действительно передается аргумент «условие».

print(len(args)) *# gives 1*

Буду признателен за ваш отзыв.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

В func2(x, *args): вы должны использовать

x, params = func1(x, params, *args)

Если вы используете args [:], вы получите объект типа dict (dict (args)).

0 голосов
/ 22 февраля 2019

Попробуйте заменить

x, params = func1(x, params, args[:])

на

x, params = func1(x, params, *args)

Если вы не используете *, значение, которое хранится в args в func1, будет (('condition',),) вместо ('condition',).Вот почему print(len(args)) по-прежнему выдает единицу в качестве вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...