2009-09-04 146 views
172

我正在學習Python並創建數據庫連接。 在嘗試添加到數據庫時,我正在考慮從信息中創建元組,然後將它們添加到數據庫中。將變量添加到Tuple

我在做什麼: 我從用戶那裏獲取信息並將其存儲在變量中。 我可以將這些變量添加到元組中嗎?你能幫我一下語法嗎?

此外,如果有這樣的一個有效的方法,請分享...

編輯 讓我編輯這個問題有點......我只需要在元組輸入信息到數據庫。一旦信息被添加到數據庫,我應該刪除元組?我的意思是我不再需要這個元組了。

回答

225

元組是不可變的;你不能改變它們在構建後包含哪些變量。但是,您可以連接或切片他們形成新的元組:

a = (1, 2, 3) 
b = a + (4, 5, 6) 
c = b[1:] 

,當然,從現有的值進行編譯:

name = "Joe" 
    age = 40 
    location = "New York" 
    joe = (name, age, location) 
+0

我只需要這些元組在用戶輸入後添加到數據庫中。所以我應該在更新到db完成後摧毀這些元組嗎? – amit 2009-09-04 18:42:43

+5

更新數據庫後,您不需要破壞元組。如果他們超出範圍,他們應該被垃圾收集。 – 2009-09-04 18:56:36

+0

在字符串中添加字符串而不破壞字符串本身檢查https://stackoverflow.com/a/16449189 – 2017-12-24 19:24:29

7

這是那麼容易,因爲以下幾點:

info_1 = "one piece of info" 
info_2 = "another piece" 
vars = (info_1, info_2) 
# 'vars' is now a tuple with the values ("info_1", "info_2") 

然而,在Python元組是不可變的,所以它一旦建立,你不能追加變量的元組。

1

我敢肯定,在python的語法是這樣的:

user_input1 = raw_input("Enter Name: ") 
user_input2 = raw_input("Enter Value: ") 
info = (user_input1, user_input2) 

一次集,元組不能改變。

2

至於其他的答案已經指出,你不能改變現有的元組,但你總是可以創建一個新的元組(可能會從現有的元組和/或其他來源獲取一些或全部項目)。

例如,如果感興趣的所有項目都在標量,你知道這些變量的名字:

def maketuple(variables, names): 
    return tuple(variables[n] for n in names) 

使用,例如,如下面的例子:

def example(): 
    x = 23 
    y = 45 
    z = 67 
    return maketuple(vars(), 'x y z'.split()) 

當然這個情況可以更簡單地表示爲(x, y, z)(或者甚至完全忽略名字,(23, 45, 67)),但是maketuple方法可能在一些更復雜的情況下是有用的(例如,其中使用的名稱也是確定的dyna在計算過程中將其附加到列表中)。

3

「一旦信息被添加到數據庫,我應該刪除元組嗎?我的意思是我不需要元組了。」

一般情況下,沒有理由刪除任何內容。有一些刪除特殊情況,但它們非常非常罕見。

只需定義一個狹窄範圍(即函數定義或類中的方法函數),並且該對象將在範圍末尾被垃圾回收。

不要擔心刪除任何東西。

[注意。我和一個人一起工作 - 除了試圖刪除對象外 - 總是在寫「重置」方法來清除它們。就像他要拯救他們並重新使用他們一樣。也是一個愚蠢的自負。只要忽略你不再使用的對象。如果你用足夠小的代碼塊來定義你的函數,那麼你就沒有什麼可考慮的了。]

161

你可以用類似t =()這樣的空白元組開頭。你可以添加+,但你必須添加另一個元組。如果你想添加一個元素,使它成爲一個單獨的元素:t = t + (element,)。您可以添加包含或不包含尾隨逗號的多個元素的元組。

>>> t =() 
>>> t = t + (1,) 
>>> t 
(1,) 
>>> t = t + (2,) 
>>> t 
(1, 2) 
>>> t = t + (3, 4, 5) 
>>> t 
(1, 2, 3, 4, 5) 
>>> t = t + (6, 7, 8,) 
>>> t 
(1, 2, 3, 4, 5, 6, 7, 8) 
+11

在這個示例中,還可以這樣做:'t =()'then't + =(1, )' – 2015-01-20 23:24:59

29

沒有提到使用附加到一個列表,然後在最後的列表轉換爲一個元組的另一個策略:

mylist = [] 
for x in range(5): 
    mylist.append(x) 
mytuple = tuple(mylist) 
print mytuple 

回報

(0, 1, 2, 3, 4) 

我有時用這個當我必須傳遞一個元組作爲函數參數時,這對numpy函數來說通常是必需的。

+1

知道這個相反的東西,也就是'list(someTuple)'也可以。這兩種對象類型顯然是可互換的 – khaverim 2014-09-08 20:41:06

+0

不是真的可以互換,我認爲從元組到列表的轉換將複製列表中的所有元素,所以肯定有地方可以避免它 – gbtimmon 2016-11-13 04:00:43