我怎么能为文字赋值?('a'= 10)

agi*_*liq 2 python

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})
Run Code Online (Sandbox Code Playgroud)

给我

<type 'str'> <type 'int'>
10
<type 'int'>
<type 'str'> <type 'int'>
10
<type 'int'>
Run Code Online (Sandbox Code Playgroud)

所以我很困惑,我怎么能这样做,因为k是一个字符串,所以我不能分配给它?

我显然做不到

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

Jos*_*Lee 5

k不是字符串,它是变量的名称.你可以轻松做到

k = 'a'
k = 10
Run Code Online (Sandbox Code Playgroud)

没有任何问题,因为Python中的赋值语句将指定名称指向右侧的任何值.

正如你所提到的,字符串是不可变的,但这意味着作为一个对象,它没有你可以调用的方法,它会导致它修改它的数据.Python中的每个变量都可以指定为指向其他变量.

例如,如果你说

x = y = 'hello'
Run Code Online (Sandbox Code Playgroud)

那么这两个xy指向同一个对象,但赋值语句一样

x += 'world'
Run Code Online (Sandbox Code Playgroud)

要么

x = 'bacon'
Run Code Online (Sandbox Code Playgroud)

将改变绑定x指向别的东西.