在Python中print语句可根据sys.stdout中包含的文件生成输出,它接受一个逗号分隔的对象表,如下实例:
x = 1
y = 2
z = 3
print("the values are", x, y, z)
#打印结果为 the values are 1 2 3
在上述实例中,对于每个对象,将调用str()函数来生成输出字符串。这些输出字符串会连接在一起,彼此之间用一个空格分开,从而得到最终的输出字符串。输出通过一个换行符终止。
要生成格式化输出,可以使用字符串格式运算符 % 或 .format()方法。
x = 1
y = 2
z = 3
print("the values are %d %7.5f %s" % (x, y, z))
#format方法会在下一节单独叙述
更改print语句的目标,也就是重定向。方法是添加特殊的 >>file修饰符和一个逗号,其中file是一个允许写入的文件对象
f = open("file_path", 'w')
print >>f, "hello world" #这是python2中的用法,在python3的具体方法请看下文
...
f.close()
Python3中最重要的更改之一就是将print转变为函数,在python2中他是一个关键字
其用法与Python2中的大致相同,但是一些细枝末节还是有区别的,下文就简述这三种。
print("the values are",x, y, z, end = '') #禁止换行符
print("the values are",x, y, z, file = f) #重定向到文件对象f
print("the values are",x, y, z, sep = ',') #在值之间添加逗号
生成输出时一个常见的问题是,生成其中包含了嵌入式变量替换的大型文本片段。比如shell脚本就支持 $name这样的变量插入。在python中无法实现这一功能。但是可以通过将格式化I/O与引导的字符串来模仿这种行为。
form = """\
Dear %(name)s,
Please send back my %(item)s or pay me $%(amount)0.2f.
Sincerely yours,
Joe Python User
"""
print(form % {'name': 'Mr.Bush',
'item': 'blender',
'amount': 50.00,
})
这段代码输出:
Dear Mr.Bush,
Please send back my blender or pay me $50.00.
Sincerely yours,
Joe Python User
format()方法是一种更加先进的替代方法,他可以使上面的代码更加简洁:
form = """\
Dear {name}s,
Please send back my {item}s or pay me ${amount:0.2f}.
Sincerely yours,
Joe Python User
"""
print(form.format(name = 'Mr.Bush', item = 'blender', amount = 50.00))
直接处理文件是我们最熟悉的I/O模型。生成器函数也可以用于一个数据片段序列的形式输出I/O流,为此只需要使用yield语句,就像使用write()或print()语句一样,这样做的好处就是在处理某一段非常庞大的数据时,就不需要将所有的内容都读到内存中,可以显著减少内存的使用。
path = 'G:/Python/boke/test111.txt'
def countdown(n):
while n > 0:
yield "T-minus %d\n" % n
n -= 1
count = countdown(10)
f = open(path,'w',encoding='UTF-8')
f.writelines(count)
f.close()
在test111.txt文件中打印结果如下:
T-minus 10
T-minus 9
T-minus 8
T-minus 7
T-minus 6
T-minus 5
T-minus 4
T-minus 3
T-minus 2
T-minus 1