无论是在变量中使用还是在打印中,数组的输出都是不同的

时间:2018-03-03 02:00:25

标签: python

所以我试图将数组中的字符串赋给变量并在函数中使用它。字符串应为"n02504458"。让我解释。这是原始数组:

('Predicted:', [
    (u'n02504458', u'African_elephant', 0.99588591), 
    (u'n01871265', u'tusker', 0.004068926),
    (u'n02504013', u'Indian_elephant', 4.499541e-05)
])

来自以下行:

 decode_predictions(preds, top=3)[0]

如果我执行以下操作:

result = decode_predictions(preds, top=3)[0]

code = result[0][0]

要获得n02504458并使用print(s)将其打印出来,我会得到我期望的结果。 但是,当我尝试将其传递给函数时,如下所示:

q = '"'
s = q + code + q
ids = synset_to_dfs_ids(s)

我会收到错误。但是,如果我这样做,我就不会有任何问题。

s = "n02504458"
ids = synset_to_dfs_ids(s)

我是python的新手,我真的不明白发生了什么。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

在Python2中,默认情况下,字符串是简单的ASCII - <type 'str'>。强制字符串文字为unicode的一种方法是在开头引号前加上字符u - <type 'unicode'>。 一般来说,最好坚持使用一个或另一个,而不是混合它们(例如,使用+字符串连接运算符)。

要在编写代码时修复代码,您可以:

  • 在输入字符串中删除unicode前缀; OR
  • 使你的引用字符串q unicode; OR
  • 在您的连接步骤中,将code变量从unicode转换为带有str(code)的“普通”字符串,但请注意,如果您的输入实际上包含任何非ASCII字符,这将失败。

实际上,您想知道synset_to_dfs_ids(s)函数是否希望获得 str unicode 字符串,并确保它获得该字符串。< / p>

另一件需要注意的事情是,当你print输出一个变量时,得到的是适合(通常)人类观察的对象的表示。当你传递变量时,它不是收件人“看到”的东西。

所以在这种情况下,我真的怀疑在你已经想要做的事情中添加一些已经是(unicode)字符串的引号。

按原样将code传递给synset_to_dfs_ids(),如果该函数可以处理unicode,或者在必要时将code转换为<str> 类型synset_to_dfs_ids(str(code))(尽管有上述条件)。

(顺便说一下,你不会在Python3中遇到这个困难,默认情况下所有的字符串都是unicode。除非你有充分的理由选择2以上,我建议只使用Python3 .Python2计划到达终点在我看来,3更容易学习,因为它可以消除一些棘手的违规行为。)

答案 1 :(得分:0)

我认为你可能会添加太多引号。

在您的工作示例中,您定义了一个字符串s_working = "n02504458"。变量s_working包含字符n02504458

在你的&#34;破碎&#34;例如,您定义一个字符串s_broken = '"' + code + '"'。假设code是包含字符n02504458的字符串,变量s_broken包含字符"n02504458"。您已明确添加变量的引号!