pass
Python3.X的print函数
严格来讲,printing在Python3.X中并不是一个单独的语句,而是之前所说的表达式语句。
print内置函数通常单独一行调用,因为它不返回任何值(严格来讲是返回None)。但因为它是函数,我们使用标准的函数调用语法而不是特殊的语句格式。并且因为它通过关键词参数提供特殊的操作模式,所以这种形式更通用和以后的拓展。
调用格式
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout][, flush=False])
- sep是插入在每个对象之间的字符串,默认是空格;传入空字符串会将所有对象压缩到一起。
- end是追加到打印字符串末尾的字符串,默认是换行符 \n ;传入空字符串会取消换行
- file指定要将字符串打印到目标文件,标准流或类文件对象。默认是sys.stdout标准输出流
- flush,在3.3时添加,默认False;它为True时会强制把缓存区的内容写入到待接收文件中。
举例
>>> print() #打印空行
>>> x = 'spam'
>>> y = 99
>>> z = ['eggs']
>>> print(x,y,z)
spam 99 ['eggs']
>>> print(x,y,z, sep='') #文本间插入字符
spam99['eggs']
>>> print(x, y, z, sep= ',')
spam,99,['eggs']
>>>
>>> print(x, y, z, end='') #结尾追加字符
spam 99 ['eggs']>>>
>>> print(x, y, z, end=''); print(x, y, z)
spam 99 ['eggs']spam 99 ['eggs']
>>> print(x, y, z, end='...\n')
spam 99 ['eggs']...
>>> print(x, y, z, sep='...', end='!\n')
spam...99...['eggs']!
>>> print(x, y, z, end='!\n', sep='...')
spam...99...['eggs']!
>>> print(x, y, z, sep='...', file=open('data.txt', 'w')) #向文件中输出字符
>>> print(x, y, z)
spam 99 ['eggs']
>>> print(open('data.txt').read())
spam...99...['eggs']
最后铭记这几种参数只是提供了方便,如果你需要特定的格式,请提前使用字符串格式化。例如:
>>> text = '%s: %-.4f, %05d' % ('Result', 3.14159, 42)
>>> print(text)
Result: 3.1416, 00042
>>> print('%s: %-.4f, %05d' % ('Result', 3.14159, 42))
Result: 3.1416, 00042
Python2.X的print语句
在2.x中printing使用独特的语法而不是调用内建函数
语句格式
举例
>>> x = 'a'
>>> y = 'b'
>>> print x, y
a b
>>> print x, y,; print x, y
a b a b
>>> print x + y
ab
>>> print '%s...%s' % (x, y)
a...b
print流重定向
Python中的’hello world’
>>> print('hello world') #3.x
hello world
>>> print 'hello world' #2.x
hello world
>>> 'hello world' #直接输出
'hello world'
这几个程序一点也不神秘,但却能完成打印操作。事实上,print
操作只是Python中众多人体工学特性的一角——它提供了sys,stdout
对象的简便接口,并且带有一些默认格式。如果你想更麻烦一点也可以用这种方法:
>>> import sys
>>> sys.stdout.write('hello world\n')
hello world
流重定向
print(X, Y)
与
import sys
sys.stdout.write(str(X) + ' ' + str(Y) + '\n')
是等价的,后者能帮助我们理解print操作是如何做的,在理解了之后我们可以重定向sys.stdout
到区别于标准输出流的不同的地方。换句话说,这提供了一种方法print
操作把文本送到其他地方,例如:
import sys
sys.stdout = open('log.txt', 'a') #重定向到一个文件
...
print(x, y, x)
重定向之后,print之后所有的操作都会将内容输出到log文本中。print
会调用sys.stdout
的write
方法,而sys.stdout
是指向文件对象的。
但这会遇到一个问题,当重定向之后,会失去的流方向,所以我们可以提前储存以便以后恢复:
>>> import sys
>>> temp = sys.stdout
>>> sys.stdout = open('log.txt', 'a')
>>> print('spam')
>>> print(1, 2, 3)
>>> sys.stdout.close()
>>> sys.stdout = temp
>>> print('back here')
back here
>>> print(open('log.txt').read())
spam
1 2 3
在Python中print也提供了一种方法临时重定向sys.stdout
,普通的print会直接切换到原始的输出流。例如:
#3.X
log = open('log.txt', 'a')
print(x, y, z, file=log)
print(a, b, c)
#2.X
log = open('log.txt', 'a')
print >> log, x, y, z
print a, b, c
这种方法很方便但要确定传递的是文件对象。
这种拓展形式的print
也用来输出error
信息到error
流
>>> import sys
>>> sys.stderr.write(('Bad!' * 8) + '\n')
Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!
>>> print('Bad!' * 8, file=sys.stderr)
Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!