Python有不同的行为打印带有和没有元组的字符串

时间:2017-04-28 17:44:58

标签: python

所以,我有一个脚本(python 2.7),它从oracle数据库中提取一些值,然后在插入或更新中用于数据库。脚本很长,所以我不打算在这里发布所有内容,几乎在所有情况下,事情都按照我的预期进行,除了这里:

通过某种方式从数据库中提取device_id和mac_id

执行此操作:

print "device_id is %s" % device_id
print "mac_id is %s" % mac_id

给出了这个:

device_id is 117281
mac_id is 3C:07:54:4A:D9:B6

但执行此操作:

print "device_id is %s, mac_id is %s" % (device_id, mac_id)

给出了这个:

device_id is (117281,), mac_id is ('3C:07:54:4A:D9:B6',)

为什么在第二次执行中提供元组中的变量会添加额外的parantheses,逗号和引号?

2 个答案:

答案 0 :(得分:2)

因为他们已经是元组了。把它们单独从元组中“提取”出来进行打印。

print "device_id is %s, mac_id is %s" % (device_id + mac_id)
print "device_id is %s, mac_id is %s" % (device_id[0], mac_id[0])

答案 1 :(得分:0)

尝试print device_id,您会看到它是一个只有一个元素(117281,)的元组。

这意味着以下内容相同:

  • print "device_id is %s" % device_id

  • print "device_id is %s" % (111,)

这些也是:

  • print "device_id is %s, mac_id is %s" % ( device_id, mac_id )是 与

  • 相同
  • print "device_id is %s, mac_id is %s" % ( (111,), ('222',) )

在这两种情况下,您都可以看到外部元组括号被删除 - 元组被解包并映射到输出字符串。但是,在第二种情况下,您添加了一个级别的括号,然后只有该元组被解压缩并且原始的单元素元组仍然存在。在第一种情况下使用它将如下所示:print "device_id is %s" % ( (111,) )

编辑:我写得太久了,没看到它已经回答了,对不起:D