2009-10-28 63 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倫敦政治經濟學院。