Python:避免使用打印命令换行[重复]
Posted
技术标签:
【中文标题】Python:避免使用打印命令换行[重复]【英文标题】:Python: avoid new line with print command [duplicate] 【发布时间】:2012-07-01 05:42:35 【问题描述】:我今天开始编程,遇到了 Python 的这个问题。这很愚蠢,但我不知道该怎么做。当我使用 print 命令时,它会打印我想要的任何内容,然后转到另一行。例如:
print "this should be"; print "on the same line"
应该返回:
这应该在同一行
而是返回:
这应该是 在同一行
更准确地说,我正在尝试使用 if
创建一个程序,告诉我一个数字是否是 2
def test2(x):
if x == 2:
print "Yeah bro, that's tottaly a two"
else:
print "Nope, that is not a two. That is a (x)"
但它不会将最后一个 (x)
识别为输入的值,而是准确地打印:“(x)”(带括号的字母)。为了使它工作,我必须写:
print "Nope, that is not a two. That is a"; print (x)
如果例如我输入test2(3)
给出:
不,那不是二,那是一 3
所以要么我需要让 Python 将打印行中的我的 (x) 识别为数字;或打印两个不同的东西,但在同一行。 在此先感谢您,对于这样一个愚蠢的问题,我们深表歉意。
重要提示:我使用的是2.5.4版
另一个注意事项:如果我输入print "Thing" , print "Thing2"
,它会在第二次打印时显示“语法错误”。
【问题讨论】:
在行尾添加逗号 (,
)。请注意,它仍然会使print
语句打印一个空格而不是换行符。
答案不一样,大多数使用the sys.stdout.write
命令(而且它是一个更高级的线程)。由于我今天开始编程,所以我不明白它们。 (我发现了几个非常相似的线程,比如 5,但我不明白或问题不完全相同)
【参考方案1】:
在 Python 3.x 中,您可以使用 print()
函数的 end
参数来防止打印换行符:
print("Nope, that is not a two. That is a", end="")
在 Python 2.x 中,您可以使用尾随逗号:
print "this should be",
print "on the same line"
不过,您不需要它来简单地打印变量:
print "Nope, that is not a two. That is a", x
请注意,尾随逗号仍会导致在行尾打印一个空格,即它等同于在 Python 3 中使用 end=" "
。要抑制空格字符,您可以使用
from __future__ import print_function
访问 Python 3 打印功能或使用 sys.stdout.write()
。
【讨论】:
这可以在 Python 3 上使用吗?我在问,因为打印需要括号,并且使用括号和 2.7,这是行不通的。 @octopusgrabbus 它不能在 3.x 上工作,你禁止使用print('whateverhere', end='')
其中 end 通常默认为 '\n'
@Jon Clements 谢谢。我没有使用过 Python 3,但在某处看到了 2.x 之间的一些变化。
两种方式都可以,非常感谢!
@octopusgrabbus 您可以使用from __future__ import print_function
自己尝试(我认为)2.6+(可能是 2.7 - 这得到了大部分的后向端口) - 只是期待很多代码休息:)【参考方案2】:
使用尾随逗号来防止出现新行:
print "this should be"; print "on the same line"
应该是:
print "this should be", "on the same line"
此外,您可以通过以下方式将传递的变量附加到所需字符串的末尾:
print "Nope, that is not a two. That is a", x
你也可以使用:
print "Nope, that is not a two. That is a %d" % x #assuming x is always an int
您可以使用%
运算符(取模)访问有关字符串格式的其他documentation。
【讨论】:
谢谢,你也猜对了。【参考方案3】:您只需要这样做:
print 'lakjdfljsdf', # trailing comma
但是在:
print 'lkajdlfjasd', 'ljkadfljasf'
有隐含的空格(即' '
)。
您还可以选择:
import sys
sys.stdout.write('some data here without a new line')
【讨论】:
导入系统; sys.stdout.write 方法的优点是在 Python 2.x 和 Python 3.x 上保持不变。 import sys sys.stdout.write('some data here without a new line') 这根本没有输出,我不明白 sys.stdout.write... @Javicobos 因为你必须在之后sys.stdout.flush()
。 sys.stdout
是一个缓冲流...恰好 print 语句隐式调用了刷新。
为了使它更清晰,some_file_like_object.write()
写入缓冲区。缓冲区仅在已满或刷新或关闭时写入。 stdin 和 stdout 被缓冲,但 stderr 不是。 print
基本上就是sys.stdout.write('lkjsflajfsd\n')
。【参考方案4】:
在 Python 2.x 中,只需在 print
语句的末尾添加一个 ,
。如果您想避免print
在项目之间放置空格,请使用sys.stdout.write
。
import sys
sys.stdout.write('hi there')
sys.stdout.write('Bob here.')
产量:
hi thereBob here.
请注意,两个字符串之间没有换行符或空格。
在 Python 3.x 中,带有print() function,你可以说
print('this is a string', end="")
print(' and this is on the same line')
然后得到:
this is a string and this is on the same line
还有一个名为 sep
的参数,您可以使用 Python 3.x 在 print 中设置它来控制相邻字符串的分隔方式(或不取决于分配给 sep
的值)
例如,
Python 2.x
print 'hi', 'there'
给予
hi there
Python 3.x
print('hi', 'there', sep='')
给予
hithere
【讨论】:
sys.stdout.write 工作异常。我不知道它的语法,你能给我一个简单的 sys.stdout.write 命令及其输出的例子吗? import sys sys.stdout.write('hi there') sys.stdout.write('Bob here.') 我将它复制粘贴到我的 python 中,当我按 Enter 时它绝对没有输出。这只能在 def function() 或其他东西中使用吗? @Javicobos 尝试添加这个sys.stdout.flush()
.. 也许你的 IO 没有被刷新。
现在工作,我需要先输入:import sys(按回车键),然后是 write.stdout.sys 的东西。非常感谢!【参考方案5】:
如果您使用的是 Python 2.5,这将不起作用,但对于使用 2.6 或 2.7 的人,请尝试
from __future__ import print_function
print("abcd", end='')
print("efg")
结果
abcdefg
对于那些使用 3.x 的用户,这已经是内置的了。
【讨论】:
太棒了!这对于编写兼容两个版本的代码非常有用,并且在 python 2 和 python 3 下都会给出相同的结果!以上是关于Python:避免使用打印命令换行[重复]的主要内容,如果未能解决你的问题,请参考以下文章