输入输出,简单来说就是从标准输入中获取数据和将数据打印到标准输出,常被用于交互式的环境当中,python实现输入的方法有下面两种:
raw_input( ):获取输入后,返回一个string类型。
下面实现一个简单的输入:
支持表达式、数字类型、字符串类型,接受为表达式时,只返回其执行结果。
使用help(input)查看帮助手册
eval( ):将字符串转化为代码执行,并返回一个对象。
exec语句:于eval( )有类似的地方,将文件或字符串中的python语句转化为代码执行,并返回执行结果。
因此,input( ) 和raw_input( )的区别主要在于,input( )可以获取任何形式的输入并返回相应的不同类型,而raw_input( )只能返回string类型对象。而且从equivalent to eval(raw_input(prompt))可以看出,input( )本质上还是由raw_input( )输入之后,再调用eval( )来最终得到input( )的结果。
值得注意的是:在很多我们需要用到raw_input( ) 的同时又要求返回一个非string类型的对象。这种时候,会对输入的数据作类型转换。
一个简单的输出例子:
支持以逗号隔开的一次多输出
在python中的内存对象都必须先进行流式化操作才能够被标准输出或保存到文件中,而print输出语句提供了调用sys.stdout.write()的接口,可以将多种形式的内存对象都转化为流式化。
可以直接使用sys.stdout.write(“str”),并且sys.stdout.write()默认不会自动换行,也可以结合sys.stdout.flush()实现不换行即时输出。
注意:stdout拥有自己的缓冲区,会将连续的输出语句执行完后在一次性的打印输出。这样造成了无法实时输出,使用sys.stdout.flush( )可以刷新缓冲区,让每一条输出语句都实时输出。
scree output:
而且sys.stdout.flush()与\r(回车转义)结合可以实现一些有趣的输出。
一个上传文件进度的小脚本:
print输出语句最大的亮点在于有多种格式化的输出来满足不同的输出需求,与c的print类似。
格式:
其中如运算符详解篇所说,% 在输出语句中会被重载为格式化符号。例如:在“ ”中的%format又称之为占位符,有下面多种类型。
format:
%d:输出int型十进制的整数
%i:输入int十进制长整数
注:长整数是长度可以超过20位的整数类型,定义一个长整数:
%u:输出无符号整数
%o:以8进制输出
%x:以16进制输出(a-e为小写)
%x:以16进制输出(a-e为大写)
%f:输出浮点数(默认精度为6)
%e:以科学计数法输出浮点数
%s:将任意对象全格式化为字符串输出(使用了隐式类型转换str())
%c:输出单个字符
注:%c一般用于将int型整数转换为对应的ascii码的单个字符
%p:以16进制输出变量的内存地址
%r:将后面的参数原样输出
复杂占位符调用格式:
%[(name)][flags][width][.precision]format
%[(dictionaryname)][标志位][指定最小宽度][.精度]format
-:输出向左对齐
+:输出包含数字符号
0:0填充
输入的int型宽度为20,而且width经常于flags一起作用于数学编程方面。
flags:[-]向左对齐
flags:[0]0填充
python的float型输出默认为6位,使用precision可以指定输出精度
注意:.precision不仅仅可以作用于float型,也可以作用于string型对象。
其中%.*s 需要在后面执行*的值
输出%(key)映射的value
print原型:
1.python 2.x
(1). print “string”,
(2). sys.stdout.write(“string”)
python 2.x中print的默认输出格式为print >> sys.stdout,而且python 2.x中python默认不能指定原型中的end=’ ‘,所以默认end=’\n‘换行符。但是python 2.x中也可以调用sys.stdout.write( )来实现不自动换行,在output上与print “string”, 的效果相当。下面例子说明:(注释为官方文档)
2.python 3.x
在python 3.x中print成为了一个真正意义上的函数,所以可以指定end的值。
在python 2.x中也可以通过import module来实现:
希望通过这一篇可以为大家打开一道窗,想要精通一门语言仅仅掌握其语法是远远不够的,除了要理会语言的设计理念外,还需要对其原型实现有一定的了解。才可以真正深入的去掌握并运用他。
jmilk