Python получает переменное имя аргумента в функции

Я хочу сделать что-то вроде этого:

fib = 1
foo = (arg):
    print arg, argName # the name of the variable that was put in for arg
foo(fib)

И вернуть это:

1, fib

Ответ 1

Вы не можете так поступать (как уже ответил Игнасио Васкес-Абрамс), но вы можете сделать это аналогичным образом:

>>> def foo(**kwargs):
    for arg_name in kwargs:
        return kwargs[arg_name], arg_name


>>> foo(fib=1)
(1, 'fib')

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

Альтернативным решением также является доступ к атрибуту __name__ переданной переменной, который приведет к получению имени функции, класса или имени (или чего-то еще, что будет определять это имя). Единственное, о чем вы должны знать, это то, что по умолчанию это не имя переменной, а исходное имя функции/класса/модуля (тот, который был назначен, когда он был определен). См. Пример здесь: http://ideone.com/MzHNND

Ответ 2

Невозможно выполнить. Python не различает имена на этом уровне.

Ответ 3

def print_args(**kwargs):
    for name,value in kwargs.iteritems():
        print name, value