如何防止Python打印添加换行符或空格?

Bar*_*art 232 python printing formatting python-2.x

在python中,如果我说

print 'h'
Run Code Online (Sandbox Code Playgroud)

我收到了字母h和换行符.如果我说

print 'h',
Run Code Online (Sandbox Code Playgroud)

我收到了字母h而没有换行.如果我说

print 'h',
print 'm',
Run Code Online (Sandbox Code Playgroud)

我收到了字母h,空格和字母m.如何防止Python打印空间?

print语句是同一循环的不同迭代,所以我不能只使用+运算符.

Fed*_*oni 285

只是评论.在Python 3中,您将使用

print('h', end='')
Run Code Online (Sandbox Code Playgroud)

抑制endline终结符,和

print('a', 'b', 'c', sep='')
Run Code Online (Sandbox Code Playgroud)

抑制项之间的空白分隔符.

  • 您可以在Python 2.6中从__future__ import print_function` (62认同)
  • 从__future__ import print_function将使用同一模块中的旧语法打破任何其他打印语句,因此虽然它比sys.stdout.write更优雅,但进行更改可能会更多. (14认同)

Gre*_*ill 196

您可以使用:

sys.stdout.write('h')
sys.stdout.write('m')
Run Code Online (Sandbox Code Playgroud)

  • 这对我很有用.当你准备好在屏幕上显示它时,不要忘记做一个sys.stdout.flush(),否则它会将它保存在一个缓冲区中,你将看不到它.我使用它来提供视觉反馈,表示脚本在经过很长时间或for循环时仍在运行. (23认同)
  • 如果键入是一个问题,请不要忘记你可以这样做:log = sys.stdout.write (6认同)
  • 要使用它,你必须使用`import sys`导入`sys` (5认同)

Dan*_*Dan 42

Greg是对的 - 你可以使用sys.stdout.write

但是,也许您应该考虑重构算法以累积<whatevers>的列表然后

lst = ['h', 'm']
print  "".join(lst)
Run Code Online (Sandbox Code Playgroud)


小智 27

或使用a +,即:

>>> print 'me'+'no'+'likee'+'spacees'+'pls'
menolikeespaceespls
Run Code Online (Sandbox Code Playgroud)

只需确保所有都是可连接的对象.

  • 或者,你可以转换它们:print str(me)+ str(no)+ str(likee)+ str(spacees)+ str(pls) (4认同)
  • 这仍然添加换行符. (2认同)

tzo*_*zot 20

Python 2.5.2 (r252:60911, Sep 27 2008, 07:03:14)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print "hello",; print "there"
hello there
>>> print "hello",; sys.stdout.softspace=False; print "there"
hellothere
Run Code Online (Sandbox Code Playgroud)

但实际上,你应该sys.stdout.write直接使用.


Bri*_*ian 17

为完整起见,另一种方法是在执行写入后清除softspace值.

import sys
print "hello",
sys.stdout.softspace=0
print "world",
print "!"
Run Code Online (Sandbox Code Playgroud)

版画 helloworld !

但是,对于大多数情况,使用stdout.write()可能更方便.


小智 13

这可能看起来很愚蠢,但似乎是最简单的:

    print 'h',
    print '\bm'
Run Code Online (Sandbox Code Playgroud)

  • 这仍然会添加换行符。 (2认同)

Joh*_*hin 9

重新获得对控制台的控制权!只是:

from __past__ import printf
Run Code Online (Sandbox Code Playgroud)

其中__past__.py包括:

import sys
def printf(fmt, *varargs):
    sys.stdout.write(fmt % varargs)
Run Code Online (Sandbox Code Playgroud)

然后:

>>> printf("Hello, world!\n")
Hello, world!
>>> printf("%d %d %d\n", 0, 1, 42)
0 1 42
>>> printf('a'); printf('b'); printf('c'); printf('\n')
abc
>>>
Run Code Online (Sandbox Code Playgroud)

额外奖励:如果你不喜欢print >> f, ...,你可以将这个caper扩展到fprintf(f,...).


jok*_*ker 8

我没有添加新答案.我只是以更好的格式提出最好的答案.我可以看到评级的最佳答案是使用sys.stdout.write(someString).你可以尝试一下:

    import sys
    Print = sys.stdout.write
    Print("Hello")
    Print("World")
Run Code Online (Sandbox Code Playgroud)

会产生:

HelloWorld
Run Code Online (Sandbox Code Playgroud)

就这些.


Ben*_*min 5

在python 2.6中:

>>> print 'h','m','h'
h m h
>>> from __future__ import print_function
>>> print('h',end='')
h>>> print('h',end='');print('m',end='');print('h',end='')
hmh>>>
>>> print('h','m','h',sep='');
hmh
>>>
Run Code Online (Sandbox Code Playgroud)

因此,使用__future__中的print_function可以明确设置print函数的sepend参数.