Как я могу присвоить значение литералу? («а» = 10) - PullRequest
2 голосов
/ 28 октября 2009
def foo(**args):
    for k, v in args.items():
        print type(k), type(v)
    for k, v in args.items():
        k = v
    print k
    print type(k)

foo(a = 10)
foo(**{'a':10})

дает мне

<type 'str'> <type 'int'>
10
<type 'int'>
<type 'str'> <type 'int'>
10
<type 'int'>

Так что я запутался, как я могу это сделать, так как k - это строка, поэтому я не должен быть в состоянии назначить ее?

Я, очевидно, не могу сделать

In [35]: 'a' = 10
------------------------------------------------------------
   File "<ipython console>", line 1
SyntaxError: can't assign to literal (<ipython console>, line 1)

Ответы [ 3 ]

5 голосов
/ 28 октября 2009

k - это не строка, это имя переменной. Вы можете легко сделать

k = 'a'
k = 10

без каких-либо проблем, поскольку оператор присваивания в Python назначит имя, указывающее на любое значение справа.

Строки являются неизменяемыми, как вы упомянули, но это означает, что как объект, он не имеет метода, который вы можете вызвать, который заставит его изменить свои данные. Каждой переменной в Python всегда можно присвоить указатель на что-то еще.

Например, если вы говорите

x = y = 'hello'

, тогда и x, и y ссылаются на один и тот же объект, но операторы присваивания, такие как

x += 'world'

или

x = 'bacon'

изменит привязку x, чтобы указывать на что-то еще.

3 голосов
/ 28 октября 2009

k не строка, это просто переменная цикла. Вы только что присвоили ему какое-то новое значение, и оно утратило связь со словарем, по которому вы перебираете.

1 голос
/ 28 октября 2009

Хорошо, когда вы делаете for k, v in args.items(), в первой (и единственной, в вашем случае) итерации идентификатор k начинает указывать на текущий ключ словаря "args", который оказывается строкой, право

Когда вы делаете k = v, k начинает указывать на то, на что указывает v, что просто является целым числом. Я не вижу здесь большой проблемы.

Если я правильно понимаю, значения переменных в python являются ссылками на объекты .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...