Можно ли передать имя переменной в функцию?

Здравствуйте. Подскажите, могу ли я изменить определенную переменную в функции? Пример есть функция:

function sum()
    a = 0
    b = 0
    c = 0
    d = 0
    i = 0
    print(a + b + c + d + i)


Можно ли в ней как нибудь изменить определенную переменную, передав название этой переменной и значение
Например:

sl = {'a': 5, 'c': 2}
sum(sl)

И в итоге выведется 7.

Я просто даже не представляю как можно реализовать это!
  • Вопрос задан
  • 1031 просмотр
Решения вопроса 1
@Meller008 Автор вопроса
Да я наверно не правильно составил вопрос! Прошу прощения! Для моего грубого примера подходит это решение!

def set_settings(self, **kwargs):
    for name, value in kwargs.items():
        getattr(self, name).setText(value)

Можно будет вызывать так:
obj.set_settings(label1='one', label2='two')
или так:
obj.set_settings(**{'label1': 'one', 'label2': 'two'})

и будет выполнен следующий код:
obj.label1.setText('one')
obj.label2.setText('two')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Например так, если я вас правильно понял:

>>> def my_func(express, args):
...     return eval(express % args)
...
>>> print my_func('%(a)d+%(b)d', {'a': 2, 'b': 3})
5
>>> print my_func('%(c)d*%(d)d', {'c': 4, 'd': 5})
20


ну либо если брать конкретно ваш пример - то как-то так:
>>> def my_sum(myargs):
...     my_vars = {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'i': 0}
...     for im in myargs.keys():
...             my_vars[im]=myargs[im]
...     return eval('%(a)d+%(b)d+%(c)d+%(d)d+%(i)d' % my_vars)
...
>>> print my_sum({'a': 5, 'c': 2})
7
Ответ написан
Комментировать
@DeepBlue
Согласно документации Питона, словарь locals(), отвечающий за значения переменных внутри функции, не может быть неявно изменён.
Note The contents of this dictionary should not be modified; changes may not affect the values of local and free variables used by the interpreter.

Возможно, однако, изменить значения глобальных переменных:
def add(dic):
    globals().update(dic)
    print(x+y)

add({'x': 2, 'y': 3})
print(x)
print(y)

Этот код выведет числа 5, 2 и 3.
Ответ написан
NullByte
@NullByte
Bad gateway
На то оно и надо, чтобы писать это в скобочках. Укажите в скобках переменные через запятую, которые будут определяться вне функции, а уже внутри нее производите с ними различные операции.
Например:
a = 10
e = 40
def function(a, e):
     b = 3
     c = 11
     d = 20
     print(a+b+c+d+e)
function(a, e)

еще прочитайте эту статейку pythonworld.ru/tipy-dannyx-v-python/vse-o-funkciya...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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