Python基本语法_输入/输出语句详解
来源:互联网 发布:第二基地知乎 编辑:程序博客网 时间:2024/06/05 02:45
目录
- 目录
- 前言
- 输入
- raw_input
- input
- raw_input 和 input 的区别
- 输出
- print 基本格式化输出
- print复杂格式化输出
- flags标志位
- width宽度
- precision精度
- dictionaryName字典
- print自动换行底层实现
- 最后
前言
程序最基本需要的两个要素,一个是数据,另外一个便是逻辑。而控制语句在程序中扮演的角色便是实现程序的逻辑,即数据的导向和对数据的操作。当然,这并不代表,程序中的数据的行为只能通过控制语句来实。但在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 ...: Writing testInput.pyIn [4]: run testInput.pyPle input your name:jmilkYour name is:jmilk
input( )
支持表达式、数字类型、字符串类型,接受为表达式时,只返回其执行结果。
In [23]: x = input('x=')x=1.23In [24]: type(x)Out[24]: floatIn [25]: x = input('x=')x=1+1*2In [26]: xOut[26]: 3In [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:123In [32]: type(intNum)Out[32]: int
输出
一个简单的输出例子:
支持以逗号隔开的一次多输出
In [4]: print "Jmilk",1Jmilk 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=utf8import timeimport syssys.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.pyHello0 1 2 3 4Jmilk
而且sys.stdout.flush()与\r(回车转义)结合可以实现一些有趣的输出。
一个上传文件进度的小脚本:
#!/usr/bin/env python#coding=utf8import timeimport sys, osfor 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 = 1LIn [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 = 97In [79]: print "%c" % asciia
%p:以16进制输出变量的内存地址
%r:将后面的参数原样输出
print复杂格式化输出
复杂占位符调用格式:
%[(name)][flags][width][.precision]format
%[(dictionaryName)][标志位][指定最小宽度][.精度]format
flags标志位
-:输出向左对齐
+:输出包含数字符号
In [120]: numOut[120]: 1111111.11111111In [121]: print "%+d" % num+1111111
0:0填充
width宽度
Out[116]: 1111111.11111111In [117]: print "%20d" % num 1111111
输入的int型宽度为20,而且width经常于flags一起作用于数学编程方面。
flags:[-]向左对齐
In [123]: print "%20f" % num 1111111.111111In [124]: print "%-20f" % num1111111.111111
flags:[0]0填充
In [125]: print "%20f" % num 1111111.111111In [126]: print "%020f" % num0000001111111.111111
.precision精度
Python的float型输出默认为6位,使用precision可以指定输出精度
In [129]: numOut[129]: 1111111.11111111In [130]: print "%-20f" % num1111111.111111 In [131]: print "%-20.8f" % num1111111.11111111
注意:.precision不仅仅可以作用于float型,也可以作用于String型对象。
In [143]: name = "chocolate"In [144]: print "%.3s" % namechoIn [145]: print "%.*s" % (3,name)choIn [146]: print "%20.3s" % name cho
其中%.*s 需要在后面执行*的值
dictionaryName字典
输出%(key)映射的value
In [140]: dic = {"name":"Jmilk","age":23}In [141]: print "%(name)s" % dicJmilkIn [142]: print "%(age)d" % dic23
print自动换行底层实现
print原型:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
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”, 的效果相当。下面例子说明:(注释为官方文档)
#!/usr/bin/env python#coding=utf8# coding=utf-8import sys, oslist1Display = ['1', '2', '3']list2Display = ['abc', 'def', 'rfs']list3Display = ['jmilk','fan','chocolate']list4Display = ['4','5','6']while list2Display != []: # 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. # print 可以将值输出到指定的输出流,或者输出到sys.stdout(标准输出) # file:指点文件对象流,默认为sys.stdout # sep:String之间插入的值,默认为间隔符 # end:追加到String最后的一个值,默认为'\n' # 下面方法(1),print >> stdout对象,每次输出两个值,与直接使用print对比是一致的。 #方法(1) print >> sys.stdout, list2Display.pop(), list1Display.pop() print list4Display.pop(), list3Display.pop() #方法(2) #print >> sys.stdout.write(list2Display.pop()) #print >> sys.stdout.write(list1Display.pop())
2.python 3.x
在Python 3.x中print成为了一个真正意义上的函数,所以可以指定end的值。
print ("string",end=' ')
在Python 2.x中也可以通过import Module来实现:
from __future__ import print_functionprint('string', end='')
最后
希望通过这一篇可以为大家打开一道窗,想要精通一门语言仅仅掌握其语法是远远不够的,除了要理会语言的设计理念外,还需要对其原型实现有一定的了解。才可以真正深入的去掌握并运用他。
Jmilk
- Python基本语法_输入/输出语句详解
- Python基本语法_运算符详解
- Python基本语法_异常处理详解
- python基本语法_输入输出详解
- Python基本语法_基本数据类型_数值型详解
- Python基本语法_基本数据类型_序列类型详解
- Python基本语法_文件操作_读写函数详解
- Python基本语法_控制流语句_if/while/for
- 第01章 CORE C++_C++ 基本结构_注释_输出语句_输入语句_初始化_条件控制_ASCII码值_转义字符_常量_变量_类型长度_运算符
- Python的基本输入和基本输出
- Python基本语法_强制数据类型转换
- python学习笔记2_基本语法
- Python基本语法_强制数据类型转换
- Python基本语法_变量作用域
- Python基本语法_强制数据类型转换
- Python开发技术详解-笔记_第02章-基本语法
- Python基本语法_集合set/frozenset_内建方法详解
- Python基本语法_函数_返回值
- *LeetCode-Sudoku Solver
- Linux 开发之路PHP篇--序言
- LeetCode 题解(238) : Strobogrammatic Number
- 医学图像处理开源软件
- LeetCode-Restore IP Addresses
- Python基本语法_输入/输出语句详解
- Ember.js 入门指南——路由切换的防止和重试
- C语言基本数据类型
- Handling Complexity in the Halo 2 AI
- LeetCode 题解(239) : Strobogrammatic Number II
- C#中RichTextBox中英文混输-等宽字体
- 正序和倒序输出乘法口诀表
- *LeetCode-Add and Search Word - Data structure design
- 组件化系统框架-序言