回答
print
仅仅是一个薄的包装,格式化(末尾指定参数和换行之间的空间)的输入,并调用的写入功能给定的对象。默认情况下,该对象是sys.stdout
,但可以使用“V形”形式传递文件。例如:
print >> open('file.txt', 'w'), 'Hello', 'World', 2+3
参见:https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement
在Python 3.x中,print
成为一个功能,但它仍然有可能通过东西比sys.stdout
感谢file
说法别的。
print('Hello', 'World', 2+3, file=open('file.txt', 'w'))
见https://docs.python.org/3/library/functions.html#print
在Python 2.6+,print
仍然是一个声明,但它可以作为一个函数
from __future__ import print_function
更新:有打印函数和打印语句之间有一点区别(更一般的是函数和as之间的区别)由Bakuriu在评论中指出)。
在错误的情况下评估参数时:
print "something", 1/0, "other" #prints only something because 1/0 raise an Exception
print("something", 1/0, "other") #doesn't print anything. The func is not called
在2.x中,该print
声明预处理你给它,把它变成沿途串,处理分离器和换行,并允许重定向到一个文件。 3.x把它变成一个函数,但它仍然有相同的责任。
sys.stdout
是一个文件或文件类,有方法写入它,其中包括字符串或沿该行的东西。
“print”首先将对象转换为字符串(如果它不是字符串)。它还会在对象之前放置一个空格,前提是它不是一行的开始和换行符的结尾。
使用标准输出时,您需要自己将对象转换为字符串(例如,通过调用“str”),并且不存在换行符。
所以
print 99
相当于:
import sys
sys.stdout.write(str(99) + '\n')
+1提到换行符!这是'print'和'.write()'之间的主要区别,我会说。 – EOL 2010-07-16 14:19:41
注意:'print'可以省略换行符。在Python 2.x中,最后输入一个逗号,并输出空格字符,但不会换行。例如。 'print 99,'在Python 3中,'print(...,end ='')'将避免添加换行符(并且也避免增加空格,除非您执行'end ='''。 – ToolmakerSteve 2013-12-19 02:36:56
@EOL有趣的是,一个名叫EOL的人对'\ n'发表评论......这让我大笑,我没有生命,杀了我 – Depado 2015-06-23 14:14:14
我的问题是是否有 在这
sys.stdout.write()
最好
情况后整理开发脚本有一天,我上传到一个Unix服务器。我的所有调试消息都使用print
语句,而这些不会出现在服务器日志中。
这种情况下,您可能需要sys.stdout.write
。
呵呵?你确定这是'print()'和'sys.stdout.write()'之间的区别,而不是'stdout'和'stderr'之间的区别吗?为了调试,你应该使用'logging'模块,它将消息输出到'stderr'。亚历山大, – ostrokach 2016-01-25 03:05:44
。使用'nohup'并重定向到'.out'文件也是如此。 – 2016-05-09 15:36:11
这里的立足之本Python入门由马克·鲁茨一些示例代码,解决你的问题:在文本编辑器
import sys
temp = sys.stdout # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123") # nothing appears at interactive prompt
print("another line") # again nothing appears. it's written to log file instead
sys.stdout.close() # ordinary file object
sys.stdout = temp # restore print commands to interactive prompt
print("back to normal") # this shows up in the interactive prompt
开幕log.txt中会显示以下内容:
testing123
another line
有什么办法可以打印到屏幕以及写入文件吗? – 2014-05-12 04:15:46
@DeveshSaini:是的,只需使用至少具有write()和flush()函数的代理类覆盖sys.stdout即可。我写了一个示例代码片段(在这里)(http://hastebin.com/owijihizus.py)。 – ponycat 2014-05-21 09:08:04
我的问题是,是否存在
sys.stdout.write()
优于
如果您正在编写可写入文件和标准输出的命令行应用程序,那么它很方便。你可以做这样的事情:
def myfunc(outfile=None):
if outfile is None:
out = sys.stdout
else:
out = open(outfile, 'w')
try:
# do some stuff
out.write(mytext + '\n')
# ...
finally:
if outfile is not None:
out.close()
它意味着你不能使用with open(outfile, 'w') as out:
模式,但有时它是值得的。
至少有一种情况需要sys.stdout
而不是打印。
当你想要覆盖的线路没有去到下一行,例如同时提请进度栏或状态消息,您需要循环像
Note carriage return-> "\rMy Status Message: %s" % progress
而且,由于打印补充一个换行符,你最好用sys.stdout
。
是否存在sys.stdout.write()优于 print的情况?
例如我工作的,其在经过数作为参数打印在金字塔格式明星小功能,但你可以做到这一点使用年底=“”在一个单独的行打印,我使用sys.stdout.write配合打印使这项工作。详细说明这个标准输出。写打印在同一行中,其中打印始终在单独一行中打印其内容。
import sys
def printstars(count):
if count >= 1:
i = 1
while (i <= count):
x=0
while(x<i):
sys.stdout.write('*')
x = x+1
print('')
i=i+1
printstars(5)
- 1. python unicode处理print和sys.stdout.write之间的区别
- 2. print()vs sys.stdout.write():which和why?
- 3. Clojure中str和print-str之间的区别/关系
- 4. 之间的〜/和的区别../
- 5. '#','%'和'$'之间的区别
- 6. {!!之间的区别!!}和{{}}
- 7. '+ ='和'= +'之间的区别?
- 8. “。+”和“。+?”之间的区别
- 9. .eq之间的区别。和==
- 10. #。/和#之间的区别。 ./
- 11. !=和!之间的区别==
- 12. “%〜dp0”和“。\”之间的区别?
- 13. | =和^ = css之间的区别
- 14. 之间的区别。和#
- 15. ==和case之间的区别?
- 16. “**/* /”和“** /”之间的区别?
- 17. jQuery - '。'之间的区别和“#”
- 18. “?1”和“?”之间的区别
- 19. `%in%`和`==`之间的区别
- 20. fmod和%之间的区别
- 21. 之间的区别:+和:+
- 22. 类区域和堆之间的区别
- 23. SPFile和PublishingPage类别之间的区别
- 24. 子类和类别之间的区别?
- 25. System.Timers.Timer Enabled = true和.Start()之间的区别Enabled = true和.Start()之间的区别
- 26. Haskell中print和putStrLn的区别
- 27. 在Perl中printf,print和sprintf的区别?
- 28. isForeground()和onExposed和onObscured之间的区别
- 29. $ .ajax()和$ .get()和$ .load()之间的区别
- 30. 和intent和setcontentview之间的区别
哪个版本的Python? 2.x还是3.x? – 2010-07-16 09:54:06
老实说,我想知道这两个,虽然我没有经验的Python 3.更新了这个问题。 – 2010-07-16 09:59:05
@ S.Lott:要求'sys.stdout.write()'和'print'(和/或为什么Python有两个)之间的基本区别是一个完全合理的问题,并且不需要示例。 OP没有说这个命令的语法很混乱。 – smci 2015-01-20 22:07:59