将变量添加到元组


282

我正在学习Python并创建数据库连接。在尝试添加到数据库时,我正在考虑从信息中创建元组,然后将其添加到数据库中。

我正在做什么:我正在从用户那里获取信息并将其存储在变量中。我可以将这些变量添加到元组吗?您能帮我语法吗?

另外,如果有有效的方法,请分享...

编辑 让我稍微编辑一下这个问题...我只需要元组即可将信息输入数据库。将信息添加到数据库后,是否应该删除元组?我的意思是我不再需要元组了。

Answers:


370

元组是不可变的;您无法在构造后更改它们包含的变量。但是,您可以将它们串联或切片以形成新的元组:

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

并且,当然,要根据现有价值来构建它们:

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

用户输入后,我只需要这些元组即可将其添加到数据库中。所以我应该销毁到数据库完成后销毁这些元组吗?
amit

5
更新数据库后,无需破坏元组。如果超出范围,则应进行垃圾收集。
贾斯汀标准时间

要在不破坏字符串本身的情况下将其添加到元组,请检查stackoverflow.com/a/16449189
Enzo Ferey

只需加上a = (),和b= a + (5),即可得出b = 5,因此b= a + (5,),将导致b = (5,);一个元组。
yashgarg1232

221

您可以从类似的空白元组开始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)

20
在此示例中,您也可以这样做:t = ()然后t += (1,)
Douglas Denhartog,2015年

2
包含尾随逗号有什么好处?
拼接

13
单例避免括号中元素之间的混淆所必需的尾随逗号。使用简单的括号按运算顺序排列,因此(7)仅为7。但是(7,)是元素为7的单元素元组。同样,3 *(7 + 8)= 45,但是3 *( 7 + 8,)=(15,15,15)-有意义吗?
丹尼尔(Daniel)

2
对于多元素元组,尾部逗号是100%可选的。包括它就表示“这是一个元组,我知道这是一个元组,我知道元组是如何工作的,我知道我可以做到这一点。” 但是没有逗号看起来更自然。Idk。由你决定。
丹尼尔(Daniel)

我认为重要的是要注意,元组是不可变的-实际上不能对其进行修改。该解决方案的作用是基于两个现有元组创建一个新的元组。
That1Guy

44

尚未提及的另一种策略是使用追加到列表,然后在最后将列表转换为元组:

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

退货

(0, 1, 2, 3, 4)

当我必须将元组作为函数参数传递时,有时会使用此函数,这对于numpy函数通常是必需的。


3
知道相反的做法(即list(someTuple)也可以)很有用。两种对象类型显然可以互换
khaverim 2014年

并不是真正可以互换的,我认为从元组到列表的转换将复制列表中的所有元素,因此绝对有避免的地方
gbtimmon

41

在Python 3中,您可以用来*根据原始元组以及新元素创建一个新的元组元素。

>>> tuple1 = ("foo", "bar")
>>> tuple2 = (*tuple1, "baz")
>>> tuple2
('foo', 'bar', 'baz')

2
到目前为止,这对我来说是最pythonic的。
Bumsik Kim,

6
这比慢10倍tuple1 + ("baz",)
Mateen Ulhaq

9

“一旦信息添加到数据库,我应该删除元组吗?我的意思是我不再需要元组。”

没有。

通常,没有理由删除任何内容。有一些特殊情况需要删除,但是非常罕见。

只需定义一个狭窄的范围(即类中的函数定义或方法函数),对象就会在范围的末尾被垃圾回收。

不用担心删除任何内容。

[注意。我曾与一个人合作,除了试图删除对象外,他还一直在编写“重置”方法来清除它们。就像他要保存它们并重用它们一样。也是一个愚蠢的自负。只需忽略不再使用的对象。如果用足够小的代码块定义函数,就没有什么要考虑的了。]


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中的元组是不可变的,因此一旦创建元组,就不能将变量追加到元组中。


3

正如其他答案所指出的那样,您无法更改现有的元组,但始终可以创建一个新的元组(该元组可能会从现有的元组和/或其他来源中获取部分或全部项目)。

例如,如果所有感兴趣的项都在标量变量中,并且您知道这些变量的名称,则:

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方法在一些更复杂的情况下可能很有用(例如,要使用的名称也是动态确定的,并在使用过程中附加到列表中)。计算)。


2

我很确定python中的语法是:

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

一旦设置,元组就不能更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.