python2.x和3.x中的输出语句有着明显不同

2.x中的print不是个函数,输出格式如下

1 Python 2.7.12+ (default, Aug  4 2016, 20:04:34) 
2 [GCC 6.1.1 20160724] on linux2
3 Type "help", "copyright", "credits" or "license" for more information.
4 >>> print "There is only %d %s in the sky."%(1,'sun')
5 There is only 1 sun in the sky.

3.x中的print成了函数,输出格式如下

1 Python 3.5.2+ (default, Aug  5 2016, 08:07:14) 
2 [GCC 6.1.1 20160724] on linux
3 Type "help", "copyright", "credits" or "license" for more information.
4 >>> print("There is only %d %s in the sky."%(1,'sun'))
5 There is only 1 sun in the sky.

为什么要做出这样的变化,主要原因有以下几点:

1.print不是函数,不能使用help(),对使用者不方便。

python2中help(print)会报错。

1 >>> help(print)
2   File "<stdin>", line 1
3     help(print)
4              ^
5 SyntaxError: invalid syntax

python3中,可以使用help(print),清楚的看到print的参数。

1 Help on built-in function print in module builtins:
 2 
 3 print(...)
 4     print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
 5     
 6     Prints the values to a stream, or to sys.stdout by default.
 7     Optional keyword arguments:
 8     file:  a file-like object (stream); defaults to the current sys.stdout.
 9     sep:   string inserted between values, default a space.
10     end:   string appended after the last value, default a newline.
11     flush: whether to forcibly flush the stream.
12 (END)

2.从上面的help(print)中我们也可以看到在print()中的两个重要参数,sep和end。这两个参数使print()相比print多了两个新功能,自定义间隔符(默认空格)和结束符(默认回车)。

1 >>> print("123","456","789")
2 123 456 789
3 >>> print("123","456","789",sep='-')
4 123-456-789
1 >>> x=1024
2 >>> print(t)
3 256
4 >>> print(t,end=" end")
5 256 end>>> 
6 >>> print(t,end=" end\n")
7 256 end

3.print()重定向输出文件更加方便。

2.x需要print>>重定向输出,感觉代码很混乱。

1 >>> out=open("test.txt","w")
2 >>> print>>out,"123"

3.x中输出文件成了一个参数,使用更方便。

1 >>> out=open("test.txt","w")
2 >>> print("123",file=out)

4.python2.x中print语句的格式化输出源自于C语言的格式化输出,这种语法对于C这种静态语言比较适用,但是对于拥有很多先进数据结构的python来说就有点力不从心了。python的元组,列表,字典,集合等不适合用这种结构表示,这些数据结构大多元素用下标表示,在这种结构中写出来很混乱。python3.x的print()函数提供了有点类似C#(不知道这么说对不对)中的格式化输出函数format()。另外print()也兼容原来的格式化输出方式。

1 >>> print("%s is %s."%('Aoko','good'))
2 Aoko is good.

format()让输出格式更清晰。

1 >>> print("{0} is {1}.".format('Aoko','good'))
2 Aoko is good.

format()支持数组下标,使python中的一些数据结构输出更加方便。

1 >>> name=["Kaito",5]
2 >>> print("{0[0]} has {0[1]} dollars.".format(name))
3 Kaito has 5 dollars.

format()下的格式限定符,和原来的差不多。

1 >>> x=5.6
2 >>> print("{0:4f}".format(x))
3 5.600000

由此看来,print()相比print还是有很大进步的。

 


再看print()函数:

参考print的官方文档

print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
  • 在python中,print默认向屏幕输出指定的文字,例如:
    >>>print('hello,world')hello world
  • print的完整格式为print(objects,sep,end,file,flush),其中后面4个为可选参数
  1. sep
    在输出字符串之间插入指定字符串,默认是空格,例如:
    >>>print("a","b","c",sep="**")a**b**c
  2. end
    print输出语句的结尾加上指定字符串,默认是换行(\n),例如:
    >>>print("a",end="$")a$print默认是换行,即输出语句后自动切换到下一行,对于python3来说,如果要实现输出不换行的功能,那么可以设置end=''(python2可以在print语句之后加“,”实现不换行的功能)
  3. file
    将文本输入到file-like对象中,可以是文件,数据流等等,默认是sys.stdout
    >>>f = open('abc.txt','w')>>>print('a',file=f)
  4. flush
    flush值为True或者False,默认为Flase,表示是否立刻将输出语句输入到参数file指向的对象中(默认是sys.stdout)例如:
    >>>f = open('abc.txt','w')>>>print('a',file=f)可以看到abc.txt文件这时为空,只有执行f.close()之后才将内容写进文件。
    如果改为:
    >>>print('a',file=f,flush=True)则立刻就可以看到文件的内容