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

时间:2009-10-28 12:07:24

标签: 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})

给我

<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 个答案:

答案 0 :(得分:5)

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

k = 'a'
k = 10

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

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

例如,如果你说

x = y = 'hello'

然后xy都引用相同的对象,但是赋值语句如

x += 'world'

x = 'bacon'

会将x的绑定更改为指向其他内容。

答案 1 :(得分:3)

k不是字符串,它只是一个循环变量。你刚给它分配了一些新的值,它失去了与你迭代的字典的关系。

答案 2 :(得分:1)

好吧,当你执行for k, v in args.items()时,在第一个(也是唯一的,在你的情况下)迭代中,标识符k开始指向字典“args”的当前键,这恰好发生在是一个字符串,对吗?

当你执行k = v时,k开始指向任何v点,这恰好是一个整数。我在这里看不到太多问题。

如果我理解正确,python中的变量值是对象的引用