【问题标题】:How to avoid converting an integer to string when concatenating [duplicate]连接时如何避免将整数转换为字符串[重复]
【发布时间】:2013-03-12 15:16:11
【问题描述】:

我知道在 python 中,你不能简单地这样做:

number = 1
print "hello number " + number

你必须这样做:

print "hello number " + str(number)

否则你会得到一个错误。

那么我的问题是,作为 python 如此紧凑的语言,以及在许多其他语言中可用的从整数到字符串的自动转换/转换功能,是不是为了避免不得不使用str() 函数每次?一些晦涩的导入,或者只是另一种方法?

编辑:当我说另一种方式时,我的意思是更简单更紧凑的编写方式。所以,我不会真正考虑 format 和其他替代方案。

谢谢。

【问题讨论】:

  • 不是重复的。我知道如何连接字符串。我在问是否有办法不必那样做。

标签: python


【解决方案1】:

你可以避开str()

print 'hello number {}'.format(number)

不管怎样,

'abc' + 123

等价于

'abc'.__add__(123)

而字符串的__add__ 方法只接受字符串。

就像

123 + 'abc'

等价于

(123).__add__('abc')

__add__ 整数方法只接受数字(int/float)。

【讨论】:

  • 虽然这是处理更复杂案例的正确方法,但print "hello number", number 在这里不是同样有效吗?
  • @DSM - 是的,会的。
  • @DSM 这正是我一直在寻找的答案。考虑将其写为答案,以便我可以接受。谢谢。
【解决方案2】:

您可以使用字符串格式,old:

print "hello number %s" % number

new:

print "hello number {}".format(number)

【讨论】:

  • 请注意,这在后台调用 str (至少我认为)......与其他格式字符串相同。就像 "%d" 会调用 int 而 %f 会调用 float
【解决方案3】:

我倾向于使用更紧凑的格式

>>> print "one",1,"two",2
one 1 two 2

或者,在 python 3 中,

>>> print("one",1,"two",2)
one 1 two 2

但是请注意,这两个选项总是会在每个参数之间引入一个空格,这使得它不适合更复杂的输出格式,您应该使用其他一些解决方案。

【讨论】:

    【解决方案4】:

    正如this 回答所解释的,这在 Python 中不会发生,因为它是强类型的。这意味着 Python 不会转换您没有明确表示要转换的类型。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2012-06-28
      • 1970-01-01
      • 2010-11-21
      • 2013-10-06
      • 2021-04-02
      • 1970-01-01
      相关资源
      最近更新 更多