2009-10-28 86 views
2
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}) 

给我我怎样才能给文字赋值? (“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) 
+1

你想做什么?简单赋值有什么问题:a = 10?这背后的目标是什么? – 2009-10-28 12:52:48

回答

3

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

1

那么,当你做for k, v in args.items(),在第一个(也是唯一的,你的情况)迭代中,标识符k开始指向字典“args”的当前键,它恰好是一个字符串,对吗?

当你做k = v时,k开始指向v指向的任何东西,它恰好是一个整数。我在这里看不到很多问题。

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

5

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

k = 'a' 
k = 10 

没有任何问题,因为在Python赋值语句将分配名称指向取其值在右侧。

正如你所说,字符串是不可变的,但这意味着作为一个对象,它没有任何方法可以调用它来修改它的数据。 Python中的每个变量都可以指定为指向别的东西。

例如,如果你说

x = y = 'hello' 

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

x += 'world' 

x = 'bacon' 

将改变绑定x指向某事e伦敦政治经济学院。