向元组添加变量

380 投票
9 回答
800490 浏览
提问于 2025-04-15 14:04

我正在创建一个数据库连接。

在尝试向数据库添加数据时,我想把信息整理成元组,然后再把它们添加到数据库里。

我从用户那里获取信息,并把这些信息存储在变量中。

我可以把这些变量放进一个元组里吗?能不能帮我一下,告诉我怎么写?

我只需要这个元组来把信息放进数据库。一旦信息添加到数据库里,我需要删除这个元组吗?因为我之后就不需要这个元组了。

9 个回答

65

在Python 3中,你可以用 * 来从原来的元组中创建一个新的元组,同时加上一个新的元素。

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

生成的字节码几乎和 tuple1 + ("baz",) 一样。

Python 3.7.5 (default, Oct 22 2019, 10:35:10) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def f():
...     tuple1 = ("foo", "bar")
...     tuple2 = (*tuple1, "baz")
...     return tuple2
... 
>>> def g():
...     tuple1 = ("foo", "bar")
...     tuple2 = tuple1 + ("baz",)
...     return tuple2
... 
>>> from dis import dis
>>> dis(f)
  2           0 LOAD_CONST               1 (('foo', 'bar'))
              2 STORE_FAST               0 (tuple1)

  3           4 LOAD_FAST                0 (tuple1)
              6 LOAD_CONST               3 (('baz',))
              8 BUILD_TUPLE_UNPACK       2
             10 STORE_FAST               1 (tuple2)

  4          12 LOAD_FAST                1 (tuple2)
             14 RETURN_VALUE
>>> dis(g)
  2           0 LOAD_CONST               1 (('foo', 'bar'))
              2 STORE_FAST               0 (tuple1)

  3           4 LOAD_FAST                0 (tuple1)
              6 LOAD_CONST               2 (('baz',))
              8 BINARY_ADD
             10 STORE_FAST               1 (tuple2)

  4          12 LOAD_FAST                1 (tuple2)
             14 RETURN_VALUE

唯一的区别在于 BUILD_TUPLE_UNPACKBINARY_ADD。具体的性能表现取决于Python解释器的实现,但一般来说,BUILD_TUPLE_UNPACK 的执行速度会比 BINARY_ADD 快,因为 BINARY_ADD 是一个多态操作符,需要额外的类型计算和隐式转换。

273

你可以先创建一个空的元组,比如用 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)
502

元组是不可变的;也就是说,一旦创建后,你不能改变它里面包含的变量。不过,你可以把它们连接起来或者切片,形成新的元组:

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)

撰写回答