2009-09-04 152 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