python列表输⼊语句_Python基本语法_输⼊输出语句详解⽬录
前⾔
程序最基本需要的两个要素,⼀个是数据,另外⼀个便是逻辑。⽽控制语句在程序中扮演的⾓⾊便是实现程序的逻辑,即数据的导向和对数据的操作。当然,这并不代表,程序中的数据的⾏为只能通过控制语句来实。但在Python编写的⾃动化脚本中,控制语句将会被频繁的使⽤。
输⼊
输⼊输出,简单来说就是从标准输⼊中获取数据和将数据打印到标准输出,常被⽤于交互式的环境当中,Python实现输⼊的⽅法有下⾯两种:
raw_input()
raw_input( ):获取输⼊后,返回⼀个String类型。
下⾯实现⼀个简单的输⼊:
In [1]: %%file testInput.py
.
..: #!/usr/bin/env python
...: #coding=utf8
...: name = raw_input('Ple input your name:')
...: print 'Your name is:%s' % name
...:
python格式化输出formatWriting testInput.py
In [4]: run testInput.py
Ple input your name:jmilk
Your name is:jmilk
input( )
⽀持表达式、数字类型、字符串类型,接受为表达式时,只返回其执⾏结果。
In [23]: x = input('x=')
x=1.23
In [24]: type(x)
Out[24]: float
In [25]: x = input('x=')
x=1+1*2
In [26]: x
Out[26]: 3
In [27]: type(x)
Out[27]: int
raw_input 和 input 的区别
使⽤help(input)查看帮助⼿册
Help on built-in function input in module __builtin__:
input(...)
input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).
(END)
eval( ):将字符串转化为代码执⾏,并返回⼀个对象。
exec语句:于eval( )有类似的地⽅,将⽂件或字符串中的Python语句转化为代码执⾏,并返回执⾏结果。
In [55]: exec("print 'Hello world'")
Hello world
因此,input( ) 和raw_input( )的区别主要在于,input( )可以获取任何形式的输⼊并返回相应的不同类型,⽽raw_input( )只能返回String 类型对象。⽽且从Equivalent to eval(raw_input(prompt))可以看出,input( )本质上还是由raw_input( )输⼊之后,再调⽤eval( )来最终得到input( )的结果。
值得注意的是:在很多我们需要⽤到raw_input( ) 的同时⼜要求返回⼀个⾮String类型的对象。这种时候,会对输⼊的数据作类型转换。
n [30]: intNum = int(raw_input('typeConversion:'))
typeConversion:123
In [32]: type(intNum)
Out[32]: int
输出
print
⼀个简单的输出例⼦:
⽀持以逗号隔开的⼀次多输出
In [4]: print "Jmilk",1
Jmilk 1
在Python中的内存对象都必须先进⾏流式化操作才能够被标准输出或保存到⽂件中,⽽print输出语句提供了调⽤sys.stdout.write()的接⼝,可以将多种形式的内存对象都转化为流式化。
可以直接使⽤sys.stdout.write(“Str”),并且sys.stdout.write()默认不会⾃动换⾏,也可以结合sys.stdout.flush()实现不换⾏即时输出。
In [94]: sys.stdout.write("jmilk")
jmilk
注意:stdout拥有⾃⼰的缓冲区,会将连续的输出语句执⾏完后在⼀次性的打印输出。这样造成了⽆法实时输出,使⽤sys.stdout.flush( )可以刷新缓冲区,让每⼀条输出语句都实时输出。
#!/usr/bin/env python
#coding=utf8
import time
import sys
sys.stdout.write("Hello")
#sys.stdout.flush()
for i in range(5):
#para 'i' not a buffer object,can't use the sys.stdout.write()
print i,
sys.stdout.flush()
time.sleep(1)
sys.stdout.write("Jmilk")
#sys.stdout.flush()
Scree Output:
In [225]: run testLine.py
Hello0 1 2 3 4Jmilk
⽽且sys.stdout.flush()与\r(回车转义)结合可以实现⼀些有趣的输出。
⼀个上传⽂件进度的⼩脚本:
#!/usr/bin/env python
#coding=utf8
import time
import sys, os
for i in range( 100 ):
time.sleep( .5 )
sys.stdout.write( "File transfer progress :[%3d] percent complete!\r" % i )
sys.stdout.flush()
print 基本格式化输出
print输出语句最⼤的亮点在于有多种格式化的输出来满⾜不同的输出需求,与C的print类似。
格式:
print("string %format1.." % (variable1,..))
其中如运算符详解篇所说,% 在输出语句中会被重载为格式化符号。例如:在“ ”中的%format⼜称之为占位符,有下⾯多种类型。Format:
%d:输出int型⼗进制的整数
%i:输⼊int⼗进制长整数
注:长整数是长度可以超过20位的整数类型,定义⼀个长整数:
In [43]: longInt = 1L
In [44]: type(longInt)
Out[44]: long
%u:输出⽆符号整数
%o:以8进制输出
%x:以16进制输出(a-e为⼩写)
%X:以16进制输出(A-E为⼤写)
%f:输出浮点数(默认精度为6)
%e:以科学计数法输出浮点数
%s:将任意对象全格式化为字符串输出(使⽤了隐式类型转换str())
%c:输出单个字符
注:%c⼀般⽤于将int型整数转换为对应的ASCII码的单个字符
In [78]: ascii = 97
In [79]: print "%c" % ascii
a
%p:以16进制输出变量的内存地址
%r:将后⾯的参数原样输出
print复杂格式化输出
复杂占位符调⽤格式:
%[(name)][flags][width][.precision]format
%[(dictionaryName)][标志位][指定最⼩宽度][.精度]format
flags标志位
-
:输出向左对齐
+:输出包含数字符号
In [120]: num
Out[120]: 1111111.11111111
In [121]: print "%+d" % num
+1111111
0:0填充
width宽度
Out[116]: 1111111.11111111
In [117]: print "%20d" % num
1111111
输⼊的int型宽度为20,⽽且width经常于flags⼀起作⽤于数学编程⽅⾯。flags:[-]向左对齐
In [123]: print "%20f" % num
1111111.111111
In [124]: print "%-20f" % num
1111111.111111
flags:[0]0填充
In [125]: print "%20f" % num
1111111.111111
In [126]: print "%020f" % num
0000001111111.111111
.precision精度
Python的float型输出默认为6位,使⽤precision可以指定输出精度
In [129]: num
Out[129]: 1111111.11111111
In [130]: print "%-20f" % num
1111111.111111
In [131]: print "%-20.8f" % num
1111111.11111111
注意:.precision不仅仅可以作⽤于float型,也可以作⽤于String型对象。In [143]: name = "chocolate"
In [144]: print "%.3s" % name
cho
In [145]: print "%.*s" % (3,name)
cho
In [146]: print "%20.3s" % name
cho
其中%.*s 需要在后⾯执⾏*的值
dictionaryName字典
输出%(key)映射的value
In [140]: dic = {"name":"Jmilk","age":23}
In [141]: print "%(name)s" % dic
Jmilk
In [142]: print "%(age)d" % dic
23
print⾃动换⾏底层实现
print原型:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论