Nie widzę siebie tego złego w Pythonie, ale zmagam się, aby dowiedzieć się, co jest złe w moim kodzie.

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')

Problemem, który stoję, jest to, że "jeśli" w FUCC1 nie jest wykonywany. Python nie widzi, że Args [0] jest równy ciągiem "warunku" pomimo tego, że wyraźnie przekazuję go podczas dzwonienia do FUNC2 na ostatniej linii. Pomimo tego, że drukujemy długość argsów przed IF, otrzymuję 1 jako wskazanie, że jest rzeczywiście przekazany argument "warunek".

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

Docenię twoją opinię. Z góry dziękuję.

1
Baraa 22 luty 2019, 15:32

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj wymienić

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

Z

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

Jeśli nie używasz wartości *, która jest przechowywana w args w func1 będzie (('condition',),) zamiast ('condition',). To także dlaczego print(len(args)) nadal daje je jako wyjście.

1
markuscosinus 22 luty 2019, 12:38

W func2(x, *args): musisz użyć

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

Jeśli używasz Args [:], to otrzymasz DICT (DICT (args)) typu obiektu.

1
Dmitry Grachev 22 luty 2019, 13:07