2017-01-16 2 views
0

В моем сценарии Python Я называю эту функцию несколько разВызов функции Python с набором параметров из переменной

write2db(int(pocnr), larm1, tid, label1, q1, x, y, lat, long, radio) 

Я хочу быть в состоянии иметь набор переменных в одной переменной.

должен выглядеть как этот

write2db (myargs)

Так что, когда я внести изменения в список аргументов я не должен делать это в более чем одном месте. Я пробовал несколько вещей, но пока не повезло. Любые предложения?

+2

'write2db (* myargs)' –

+1

Возможная Дубликат [Как извлечь параметры из списка и передать их в вызове функции] (http://stackoverflow.com/questions/7527849/how-to- extract-parameters-from-a-list-and-pass-them-to-a-function-call) –

+0

Я чувствую себя глупо, но я не понимаю всех ответов. Убрать вопрос немного. Как определить myargs? Я пытался сделать это глобальным как myargs = (int (pocnr), larm1, tid, label1, q1, x, y, lat, long, radio), но тогда переменные еще не определены. –

ответ

2

Вы можете использовать *args или **kwargs. Имена args и kwargs не имеют значения, но их * и **, что делает трюк. В принципе, * распакует список, и аналогичным образом ** распакует dict.

*args - это всего лишь список значений в том же порядке, в котором вы определили свою функцию.

например.

args = [23, 6, 2, "label", 5, 25, 21, 343.22, 111.34, 2] 
write2db(*args) 

**kwargs отображение ключ-значение (питон ДИКТ) имен аргументов для аргумента значения

например.

kwargs = { 
    'pocnr': 23, 
    'larm1': 21, 
    # ... etc. 
} 
write2db(**kwargs) 
+0

Итак, вы думаете, что args = [int (pocnr), larm1, tid, label1, q1, x, y, lat, long, radio] будут делать трюк? –

+0

Да, должно. – denvaar

+0

Он сделал! Большое спасибо. Теперь я могу сделать свой код более чистым и простым для администратора. –

0

Вы можете создать namedtuple с каждым из этих аргументов, а затем получить аргументы из-за имени внутри функции.

Или вы могли бы просто использовать переменную аргумент длины * арг, а затем внутри функции:

for arg in args: 
     # do something with arg 
+1

Вы можете просто передать 'f (* args) '. Не нужно менять какие-либо определения. –

Смежные вопросы