Python语法基础_控制语句_输入输出语句详解

前言

程序最基本需要的两个要素,一个是数据,另外一个便是逻辑。而控制语句在程序中扮演的角色便是实现程序的逻辑,即数据的导向和对数据的操作。当然,这并不代表,程序中的数据的行为只能通过控制语句来实。但在Python编写的自动化脚本中,控制语句将会被频繁的使用。

输入

输入输出,简单来说就是从标准输入中获取数据和将数据打印到标准输出,常被用于交互式的环境当中,Python实现输入的方法有下面两种:

raw_input()

raw_input( ):获取输入后,返回一个String类型。
下面实现一个简单的输入:

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.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)查看帮助手册

in function input in module __builtin__:

input(...)
 input([prompt]) -> value

 Equivalent to eval(raw_input(prompt)).
(END)

eval( ):将字符串转化为代码执行,并返回一个对象。
exec语句:于eval( )有类似的地方,将文件或字符串中的Python语句转化为代码执行,并返回执行结果。

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类型的对象。这种时候,会对输入的数据作类型转换。

30]: intNum = int(raw_input('typeConversion:'))
typeConversion:123

In [32]: type(intNum)
Out[32]: int

输出

print

一个简单的输出例子:
支持以逗号隔开的一次多输出

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:[-]向左对齐

123]: print "%20f" % num
 1111111.111111

In [124]: print "%-20f" % num
1111111.111111

flags:[0]0填充

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型对象。

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原型:

' ', 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-8
import sys, os

list1Display = ['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_function
print('string', end='')

最后

希望通过这一篇可以为大家打开一道窗,想要精通一门语言仅仅掌握其语法是远远不够的,除了要理会语言的设计理念外,还需要对其原型实现有一定的了解。才可以真正深入的去掌握并运用他。

Jmilk

时间: 2024-09-17 07:15:49

Python语法基础_控制语句_输入输出语句详解的相关文章

PHP读书笔记整理_结构语句详解_php实例

PHP结构语句顺序结构 顺序结构就像一条直线,按着顺序一直往下执行.我们编写的代码默认都是按照顺序结构执行的. 条件结构之if-else- 条件结构就像一个岔路口,可以向左走,也可以向右走.比如上洗手间,我们知道我们的性 别,这时候我们需要根据洗手间提供的条件,左边男洗手间,右边女洗手间,或者正好相反,其中性别就是这个条件结构的条件.再比如,现在的分数都流行使用 A.B.C来分级,假设考试成绩是93分,可以将其设置为等级A,考试成绩是87,可以将其设置为等级B,这里分数区间即为条件结构中的条件.

python魔法方法-属性转换和类的表示详解_python

类型转换魔法 类型转换魔法其实就是实现了str.int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: •__int__(self) •转换成整型,对应int函数. •__long__(self) •转换成长整型,对应long函数. •__float__(self) •转换成浮点型,对应float函数. •__complex__(self) •转换成 复数型,对应complex函数. •__oct__(self) •转换成八进制,对应oct函数. •__hex__(s

MyBatis 执行动态 SQL语句详解_java

大家基本上都知道如何使用 MyBatis 执行任意 SQL,使用方法很简单,例如在一个 XXMapper.xml 中: <select id="executeSql" resultType="map"> ${_parameter} </select> 你可以如下调用: sqlSession.selectList("executeSql", "select * from sysuser where enabled

Mysql的基础使用之MariaDB安装方法详解_Mysql

我首次用mysql是在ubuntu上,现在用的是linux 中的Red Hat 分支的centOS 7 ,安装时发现通常用的都是MariaDB 来代替mysql,通过资料查询发现Mariadb是mysql的其中的一种分支,由mysql的创始人带领的团队所开发的mysql分支的一种版本,因为mysql受到被Oracle收购后的日渐封闭与缓慢的更新,众多Linux发行版逐渐抛弃了这个人气开源数据库,使MySQL在各大Linux发行版中的失势由于不满MySQL被Oracle收购后的日渐封闭与缓慢的更新

Python中使用不同编码读写txt文件详解

  这篇文章主要介绍了Python中使用不同编码读写txt文件详解,本文给出不同编码下的读写文件代码方法,需要的朋友可以参考下 代码如下: import os import codecs filenames=os.listdir(os.getcwd()) out=file("name.txt","w") for filename in filenames: out.write(filename.decode("gb2312").encode(&q

MyBatis的foreach语句详解_java

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collectio

Python黑帽编程 3.4 跨越VLAN详解_python

VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理网络障碍,将不同子网中的用户划到同一个VLAN中.图2是一个VLAN划分的例子. 图2 实现VLAN的方式有很多种,基于交换设备的VLAN划分,一般有两种: l 基于交换机的端口划分 l 基于IEEE 802.1q协议,扩展以太网帧格式 基于第二层的VLAN技术,有个Trunking的概念,Trunking是用来在不同的交换机之间进行连接,以

Python实现的数据结构与算法之快速排序详解_python

本文实例讲述了Python实现的数据结构与算法之快速排序.分享给大家供大家参考.具体分析如下: 一.概述 快速排序(quick sort)是一种分治排序算法.该算法首先 选取 一个划分元素(partition element,有时又称为pivot):接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分).划分元素pivot.right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上:然后分别对left和right两个部分进行 递归排序. 其中

Mysql左连接sql left join 语句详解

mysql教程左连接sql left join 语句详解 mysql左连接查询是联合查询中的一种方式,就是说把两个相关的表通过这种方式联合在一起查询,从而更加方便调用数据,避免多层循环嵌套. 左连接查询所用关键字 left join ,书面解释如下:   左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行. 下面我解释一下,也就是说左链接查询的返回结果既包含了left join关键字左边表的全部资料,同时也包含了与左表匹配的右表中的符合条件的资源. 简单的说就是以左表为中心,