Ссылаться на конкретный параметр по объекту в массиве?

Так что я действительно не знаю, как сформулировать этот вопрос, или я уверен, что могу просто погуглить.

У меня есть такая функция, как:

def example(parameter1 = "", parameter2 = "", parameter3 =""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

И я хочу иметь возможность, скажем, вызвать его 3 раза и передать сразу только один параметр, такой как:

example(parameter1 = "Hello")
example(parameter2 = "Stack")
example(parameter3 = "Overflow")

Но в моем реальном коде мне нужно обобщить это и иметь гораздо больше параметров, поэтому я хочу иметь возможность делать что-то вроде:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example(paramnames[i] = parameters[i])

Есть ли способ в Python, чтобы сделать это?

4 ответа

Решение

То, что вы ищете, называется упаковкой аргументов и использует * или же ** обозначить позиционные и именованные аргументы:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for name, value in zip(paramnames, parameters):
    example(**{name: value})

def example(parameter1="", parameter2="", parameter3=""):
    print(parameter1)
    print(parameter2)
    print(parameter3)

Имейте в виду, что если аргумент не будет передан, он будет использоваться по умолчанию. Итак, вывод:

Hello



Stack



Overflow

Использовать dict и ** обозначения:

parameters = {'parameter1': 'Hello',
              'parameter2': 'Stack', 
              'parameter3': 'Overflow'}

for k, v in parameters.items():
    example(**{k: v})

Если вам нужно сохранить порядок, используйте OrderedDict

Есть несколько способов сделать это.

Наиболее простой способ - использовать словарь для хранения аргументов, прежде чем передать их все функции, используя example(**param_dict),

Более "причудливый" подход будет использовать functools.partial вызываемому объекту с заранее заданными параметрами. Вы бы сделали что-то вроде example = partial(example, parameter1="hello") чтобы добавить параметры, просто позвоните example() в конце. Этот подход может быть полезен, если параметры поступают из разных мест, и вам нужно некоторое время сохранять функцию с ее параметрами, как при обратном вызове.

Почему бы не использовать такие слова:

paramnames = ['parameter1', 'parameter2', 'parameter3']
parameters = ['Hello', 'Stack', 'Overflow']

for i in range(3):
    example({paramnames[i] : parameters[i]})

а также:

def example(para_dict):
    for k,v in para_dict.items():
        print(v)

если вы хотите использовать каждый параметр в другом коде, вы можете протестировать на "k"

Другие вопросы по тегам