Python преобразовывает args в kwargs

Вы все немного перепутали, вам нужно использовать метод emit(value) в поле @Output в дочернем компоненте, и это значение будет передано в метод в родительском компоненте, с которым вы подписались на конкретный Output из ребенок. Например, взгляните на этот пример (смотрите в папке «example»):


Здесь мы запускаем событие в дочернем компоненте:

toggleSuccess() {
    this.clickValidateAndSave.emit(this.bSuccess = !this.bSuccess);
}

Здесь мы подписываемся на это событие в родительском компоненте:


И вот тот метод в родителе, которым мы подписались на дочернее событие:

onClickValidateAndSave(value: boolean) {
    this.buttonDisabled = value;
}

Обратите внимание, что мы можем получить доступ Output значение события через параметры. Надеюсь, это поможет.

18
задан jkoelker 6 May 2009 в 18:14
поделиться

3 ответа

Note - co_varnames will include local variables as well as keywords. This probably won't matter, as zip truncates the shorter sequence, but may result in confusing error messages if you pass the wrong number of args.

You can avoid this with func_code.co_varnames[:func_code.co_argcount], but better is to use the inspect module. ie:

import inspect
argnames, varargs, kwargs, defaults = inspect.getargspec(func)

You may also want to handle the case where the function defines **kwargs or *args (even if just to raise an exception when used with the decorator). If these are set, the second and third result from getargspec will return their variable name, otherwise they will be None.

6
ответ дан 30 November 2019 в 07:09
поделиться

Любой аргумент, переданный позиционно, будет передан * args. И любой аргумент, переданный в качестве ключевого слова, будет передан ** kwargs. If you have positional args values and names then you can do:

kwargs.update(dict(zip(myfunc.func_code.co_varnames, args)))

to convert them all into keyword args.

17
ответ дан 30 November 2019 в 07:09
поделиться

Ну, это может быть излишеством. Я написал его для пакета dectools (на PyPi), так что вы можете получить обновления там. Он возвращает словарь с учетом позиционных, ключевых слов и аргументов по умолчанию. В пакете есть набор тестов (test_dict_as_called.py):

 def _dict_as_called(function, args, kwargs):
""" return a dict of all the args and kwargs as the keywords they would
be received in a real function call.  It does not call function.
"""

names, args_name, kwargs_name, defaults = inspect.getargspec(function)

# assign basic args
params = {}
if args_name:
    basic_arg_count = len(names)
    params.update(zip(names[:], args))  # zip stops at shorter sequence
    params[args_name] = args[basic_arg_count:]
else:
    params.update(zip(names, args))    

# assign kwargs given
if kwargs_name:
    params[kwargs_name] = {}
    for kw, value in kwargs.iteritems():
        if kw in names:
            params[kw] = value
        else:
            params[kwargs_name][kw] = value
else:
    params.update(kwargs)

# assign defaults
if defaults:
    for pos, value in enumerate(defaults):
        if names[-len(defaults) + pos] not in params:
            params[names[-len(defaults) + pos]] = value

# check we did it correctly.  Each param and only params are set
assert set(params.iterkeys()) == (set(names)|set([args_name])|set([kwargs_name])
                                  )-set([None])

return params
5
ответ дан 30 November 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: