#python
#python
Вопрос:
Я покопался в вопросах, и, похоже, я не могу заставить это работать.
По сути, я хочу передать необязательное ключевое слово в «wrapperfunc», чтобы я получал относительные данные из функции «load_data», которую она вызывает. Я хочу, чтобы аргумент wrapperfunc указывал, какой метод выполняется для данных.
Я уверен, что это случай правильной распаковки аргументов?
import numpy as np
def load_data(remove_smallest = None, remove_largest = None):
data = np.arange(0,100,1)
if remove_smallest != None:
data = data[remove_smallest::]
elif remove_largest != None:
data = data[0:(100-remove_largest)]
else:
data = data
return print(data)
def wrapperfunc(**args):
val = [10, 20, 30]
for v in val:
load_data(args = v)
wrapperfunc(remove_smallest)
wrapperfunc(remove_largest)
Ответ №1:
**kwargs
это просто dicts of str: object
, поэтому вы можете заставить оболочку взять имя ключа, создать из него dict и использовать его для вызова обернутой функции:
def wrapperfunc(key):
val = [10, 20, 30]
for v in val:
load_data(**{key: v})
wrapperfunc('remove_smallest')
wrapperfunc('remove_largest')
Ответ №2:
Нет, аргументы ключевого слова являются чисто синтаксическими, хотя имя и значение собираются в a dict
, если имя не соответствует именованному параметру.
Самое близкое, что вы можете сделать, это передать str
значение, а затем передать unpacked dict
to load_data
.
def wrapper(arg):
val = [10, 20, 30]
for v in val:
load_data(**{arg: v})
wrapper('remove_smallest')
Комментарии:
1. «Нет, аргументы ключевого слова являются чисто синтаксическими» именованные аргументы абсолютно не являются «чисто синтаксическими». Может быть, вы имели в виду «символический», поскольку они являются символами? «Чисто синтаксический» будет означать, что они не существуют во время выполнения, что они, безусловно, делают.
2. Да, это так. Это синтаксический способ присвоения значения параметру по имени, а не по позиции, или для заполнения
**
параметра. Передача явно распакованного словаря — это еще один способ указать значения по имени.3. Это не то, что означает «чисто синтаксический». И аргументы ключевого слова не обязательно передаются как dict .
4. Обращение к байтовым кодам (специфичным для CPython) полностью обходит проблему синтаксиса. Я говорю об исходном коде Python.