python - 在 Python 中使用逗号、连接和字符串格式化程序之间的区别

标签 python string

我正在自学python(2.7)。 我了解到我们可以使用以下方式将字符串和变量放在一起打印:

x = "Hello"
y = "World"

使用逗号:

print "I am printing" , x, y  # I know that using comma gives automatic space

通过使用连接:

print "I am printing" + " " + x + " " + y 

通过使用字符串格式化程序

print "I am printing %s %s" % (x, y) 

在这种情况下,所有三个打印相同:

I am printing Hello World

这三者之间有什么区别?是否有任何特定情况表明其中一个优于另一个?

最佳答案

要首先回答一般性问题,您通常会在编写代码时使用打印将脚本中的信息输出到屏幕上,以确保您得到预期的结果。

随着您的代码变得越来越复杂,您可能会发现记录会比打印更好,但这是另一个答案的信息。

在与 Python 解释器的交互式 session 中回显的打印和返回值表示之间存在很大差异。打印应该打印到您的标准输出。在脚本中运行等效代码时,表达式返回值的回显表示(如果不是 None 则显示在您的 Python shell 中)将保持静默。

1。打印

在 Python 2 中,我们有打印语句。在 Python 3 中,我们得到了一个 print 函数,我们也可以在 Python 2 中使用它。

用逗号打印语句 (Python 2)

打印语句用逗号分隔项目,使用空格分隔它们。尾随逗号将导致附加另一个空格。没有尾随逗号将附加换行符以附加到您的打印项目。

您可以将每个项目放在单独的打印语句中,并在每个项目之后使用逗号,它们将在同一行上打印相同的内容。

例如(这只能在脚本中工作,在交互式 shell 中,你会在每一行之后得到一个新的提示):

x = "Hello"
y = "World"

print "I am printing",
print x,
print y 

会输出:

I am printing Hello World

打印功能

使用 Python 3 的内置打印功能,在 Python 2.6 和 2.7 中也可以使用此导入:

from __future__ import print_function

你可以声明一个分隔符和一个结束符,这给了我们更多的灵 active :

>>> print('hello', 'world', sep='-', end='\n****\n')
hello-world
****
>>>

默认是 ' ' 代表 sep 和 '\n' 代表 end:

>>> print('hello', 'world')
hello world
>>> 

2。字符串连接

串联在内存中创建每个字符串,然后在它们的末端将它们组合在一起形成一个新字符串(因此这可能对内存不太友好),然后同时将它们打印到您的输出中。当您需要将可能在其他地方构建的字符串连接在一起时,这很好。

print('hello' + '-' + 'world')

将打印

hello-world

在尝试以这种方式将其他类型的文字加入字符串之前要小心,首先要将文字转换为字符串。

print('here is a number: ' + str(2))

打印

here is a number: 2

如果您尝试连接整数而不首先将其强制为字符串:

>>> print('here is a number: ' + 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

这应该表明您应该只尝试连接已知为字符串的变量。接下来演示的新格式化方式为您解决了这个问题。

3。字符串插值

您演示的格式是从 C 中借用的旧字符串插值样式。它采用旧字符串,一次创建一个新字符串。它的作用相当简单。当您似乎可能构建一个相当大的模板时(在 3+ 行和 3+ 变量处,您绝对应该这样做),您应该使用它。

这样做的新方法是这样做(使用参数的索引):

print('I am printing {0} and {1}'.format(x, y))

或在 python 2.7 或 3 中(使用隐含索引):

print('I am printing {} and {}'.format(x, y))

或使用命名参数(这在语义上很容易阅读,但代码看起来不是很干(即不要重复自己))

print('I am printing {x} and {y}'.format(x=x, y=y))

% 样式格式(此处未演示)相比,它的最大好处是它可以让您组合位置参数和关键字参数

print('I am printing {0} and {y}'.format(x, y=y))

Python 3.6 中的新功能,格式文字

Python 3.6 将有 format literals , 语法更优雅(冗余更少)。简单的语法类似于:

print(f'I am printing {x} and {y}')

格式文字实际上可以就地执行代码:

>>> print(f'I am printing {"hello".capitalize()} and {"Wo" + "rld"}')
I am printing Hello and World

关于python - 在 Python 中使用逗号、连接和字符串格式化程序之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21542694/

相关文章:

python - 一行for循环中的多个赋值python

python - __future__ 模块在 exec 中不生效

regex - 替换字符串中除最后 4 个字符外的所有字符

java - 如何拆分没有模式的文本文件

python - 使用列表推导式计算所有列表元素的总和

python - 优化遍历 numpy 数组

python - 重新排列字符串中的数字

javascript - Concat JS 不工作

Python - 一次性ifs

php - MySQL 文本区域中的前导空格