目录

前言

程序最基本需要的两个要素,一个是数据,另外一个便是逻辑。而控制语句在程序中扮演的角色便是实现程序的逻辑,即数据的导向和对数据的操作。当然,这并不代表,程序中的数据的行为只能通过控制语句来实。但在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.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)

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

Python基本语法_输入/输出语句详解的更多相关文章

  1. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  2. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  3. 【python】redis基本命令和基本用法详解

    [python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...

  4. C#基础表达式语句详解(上)

    本节内容: 1.表达式的定义: 2.各类表达式概览: 3.语句的定义: 4.语句详解: 1.表达式的定义: 1.1什么是表达式: (定义见下图)各类编程语言对表达式的实现不尽相同,但大体上都符合这个定 ...

  5. SQL Server 表的管理_关于完整性约束的详解(案例代码)

    SQL Server 表的管理之_关于完整性约束的详解 一.概述: ●约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据.记录中数据和表之间的数据来保证数据的完整性 ...

  6. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

  7. MySQL之SELECT 语句详解

    本文参考实验楼的SELECT 语句详解结合自己操作部分而写成. 注意:大多数系统中,SQL语句都是不区分大小写的,但是出于严谨和便于区分保留字和变量名,在书写的时,保留字应大写,而变量名应小写.所谓的 ...

  8. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  9. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

随机推荐

  1. concurrent.futures:线程池,让你更加高效、并发的处理任务

    并发任务池 concurrent.futures模块提供了使用工作线程或进程池运行任务的接口. 线程池和进程池的API是一致的,所以应用只需要做最小的修改就可以在线程和进程之间进行切换 这个模块提供了 ...

  2. 修改mysql的binlog的位置

    最近项目上装的mysql服务,分配的磁盘空间太小了,导致binlog两天时间就能打满,这里记录下处理方式 mysql的binlog日志是一个很重要的日志,以事件形式记录了所有的DDL和DML(除了数据 ...

  3. pmf文件

    1.首先是视频软件,其次还是DISKGENI(磁盘分区软件),当作镜像文件恢复文件到磁盘(类似ISO).2.PMF文件为主要与primarily Pegasus Mail Message Attach ...

  4. tomcat9.0 问题汇总

    安装时提示 Failed installing tomcat9 service 是因为之前安装tomcat,然后直接删除文件夹,虽然把文件夹删除了,但是重新安装时,服务存在相同的服务名,解决办法:使用 ...

  5. Android Studio 中出现APK error

    可能有很多人在用Android Studio编写程序时,时不时的会出现一个APK error的错误,反正我自从开始用Android Studio后,这个错误真的是时不时的蹦跶出来 最开始的时候,我是去 ...

  6. SIM800c收发短信及AT指令

    一.sim800设备安装 淘宝搜索sim800,差不多就是这么个样子 购买之后,安装手机卡,卡的缺口向外插入,会有卡住的感觉,再按一下卡会弹出 安装usb转串口驱动(CH340),设备的指示灯先是快闪 ...

  7. Sql Service中的分页

    创建存储过程如下: CREATE PROCEDURE [dbo].[sp_GetPageList] ), --表名 ) = '*', --字段名(全部字段为*) ), --排序字段(必须!支持多字段) ...

  8. Flash大文件断点续传解决方案

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  9. luogu 2993 [FJOI2014]最短路径树问题 Dijkstra+点分治

    挺简单的,但是给人一种把两个问题强行弄到一起的感觉. 十分不好写. Code: #include <queue> #include <cstdio> #include < ...

  10. 二叉排序树(Binary Sort Tree)

    1.定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①  若它的左子树 ...