Python基本语法_输入/输出语句详解

简介: 目录目录前言输入raw_inputinput raw_input 和 input 的区别输出printprint 基本格式化输出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.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

相关文章
|
2月前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
73 4
|
24天前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
36 7
|
4月前
|
XML 前端开发 数据格式
三分钟搞定 Python XPath 语法
XPath(XML Path Language)是一种用于在 XML 文档中查找信息的语言。它基于树状结构的 XML 文档,可以通过路径表达式来选取节点或节点集。也常常用来解析 HTML。 如果你是一个前端,对用路径获取元素可能陌生又熟悉。陌生是很多的路径,熟悉的路径上又有熟悉的属性和方法。下面我们就来探究一下 XPath 的魅力。
|
23天前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
49 5
|
25天前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
32 1
|
1月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
1月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
24 2
|
2月前
|
存储 程序员 开发者
Python编程入门:从零开始掌握基础语法
【10月更文挑战第21天】本文将带你走进Python的世界,通过浅显易懂的语言和实例,让你快速了解并掌握Python的基础语法。无论你是编程新手还是想学习一门新的编程语言,这篇文章都将是你的不二之选。我们将一起探索变量、数据类型、运算符、控制结构、函数等基本概念,并通过实际代码示例加深理解。准备好了吗?让我们开始吧!
|
2月前
|
存储 C语言 索引
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
本文全面介绍了Python的基础知识,包括Python的诞生背景、为什么学习Python、Python的应用场景、Python环境的安装、Python的基础语法、数据类型、控制流、函数以及数据容器的使用方法,旨在为Python零基础读者提供一篇全面掌握Python语法的博客。
74 0
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
|
2月前
|
存储 数据可视化 数据处理
【Python篇】快速理解Python语法:全面指南
【Python篇】快速理解Python语法:全面指南
54 1