Python之print详解

http://www.jb51.net/article/55768.htm
 
print的一些基本用法,在前面的讲述中也涉及一些,本讲是在复习的基础上,尽量再多点内容。
 

eval()

在print干事情之前,先看看这个东东。不是没有用,因为说不定某些时候要用到。

复制代码 代码如下:
>>> help(eval)      #这个是一招鲜,凡是不理解怎么用,就用这个看文档

Help on built-in function eval in module __builtin__:

eval(...)
    eval(source[, globals[, locals]]) -> value

Evaluate the source in the context of globals and locals.
    The source may be a string representing a Python expression
    or a code object as returned by compile().
    The globals must be a dictionary and locals can be any mapping,
    defaulting to the current globals and locals.
    If only globals is given, locals defaults to it.

能看懂更好了,看不懂也没有关系。看我写的吧。哈哈。概括一下,eval()是把字符串中符合python表达式的东西计算出来。意思就是:

复制代码 代码如下:
>>> 3+4         #这是一个表达式,python会根据计算法则计算出结果来
7
>>> "3+4"       #这是一个字符串,python就不计算里面的内容了,虽然里面是一个符合python规范的表达式
'3+4'
>>> eval("3+4") #这里就跟上面不一样了,就把字符串里面的表达式计算出来了
7

下面再看一个字符串“相加”的例子:

复制代码 代码如下:
>>> "qiwsir"+".github.io"
'qiwsir.github.io'
>>> "'qiwsir'+'.github.io'"    #字符串里面,python是不会进行“计算”的
"'qiwsir'+'.github.io'"
>>> eval("'qiwsir'+'.github.io'") #eval()做的事情完全不一样,它会把字符串里面的计算出来
'qiwsir.github.io'

顺便再说一下另外一个跟eval()有点类似的函数:exec(),这个函数专门来执行字符串或文件里面的python语句。

复制代码 代码如下:
>>> exec "print 'hello, qiwsir'"
hello, qiwsir
>>> "print 'hello, qiwsir'"
"print 'hello, qiwsir'"

print详解

print命令在编程实践中用的比较多,特别是要向看看程序运行到某个时候产生了什么结果了,必须用print来输出,或者说,本讲更宽泛地说,就要说明白把程序中得到的结果输出问题。

比较简单的输出,前面已经涉及到过了:

复制代码 代码如下:
>>> name = 'qiwsir'
>>> room = 703
>>> website = 'qiwsir.github.io'
>>> print "MY name is:%s\nMy room is:%d\nMy website is:%s"%(name,room,website)
MY name is:qiwsir
My room is:703
My website is:qiwsir.github.io

其中,%s,%d就是占位符。

复制代码 代码如下:
>>> a = 3.1415926
>>> print "%d"%a    #%d只能输出整数,int类型
3
>>> print "%f"%a  #%f输出浮点数
3.141593
>>> print "%.2f"%a #按照要求输出小数位数
3.14
>>> print "%.9f"%a  #如果要求的小数位数过多,后面就用0补全
3.141592600
>>> b = 3         
>>> print "%4d"%b   #如果是整数,这样写要求该整数占有四个位置,于是在前面增加三个空格
   3                #而不是写成0003的样式

换一种范式,写成这样,就跟上面有点区别了。

复制代码 代码如下:
>>> import math     #引入数学模块
>>> print "PI=%f"%math.pi #默认,将圆周率打印成这个样子
PI=3.141593
>>> print "PI=%10.3f"%math.pi #约束一下,这个的含义是整数部分加上小数点和小数部分共计10位,并且右对齐
PI=     3.142
>>> print "PI=%-10.3f"%math.pi #要求显示的左对齐,其余跟上面一样
PI=3.142
>>> print "PI=%06d"%int(math.pi) #整数部分的显示,要求共6位,这样前面用0补足了。
PI=000003

其实,跟对上面数字操作类似,对字符串也可以做一些约束输出操作。看下面实验,最好看官也试试。

复制代码 代码如下:
>>> website
'qiwsir.github.io'
>>> print "%.3s"%website
qiw
>>> print "%.*s"%(3,website)
qiw
>>> print "%7.3s"%website
    qiw
>>> print "%-7.3s"%website
qiw   

总体上,跟对数字的输出操作类似。不过,在实际的操作中,这些用的真的不是很多,至少在我这么多年的代码生涯中,用到上面复杂操作的,就是现在给列
位展示的时候,充其量用一用对float类型的数据输出小数位数的操作,其它的输出操作,以默认的那种方式居多。请看官在这里鄙夷我的无知吧。

行文到此,提醒列位,如果用python3的,请用print(),要加个括号。

print有一个特点,就是输出的时候,每行后面都自动加上一个换行符号\n,这个在前面已经有所提及。

复制代码 代码如下:
>>>  website
'qiwsir.github.io'
>>> for word in website.split("."):
...     print word
...
qiwsir
github
io
>>> for word in website.split("."):
...     print word,         #注意,加了一个逗号,输出形式就变化了吧。
...
qiwsir github io

%r是万能的吗?

我曾经说过,懒人改变世界,特别是在敲代码的领域。于是就有人问了,前面一会儿是%s,一会儿是%d,麻烦,有没有一个万能的?于是网上就有人给出答案了,%r就是万能的。看实验:

复制代码 代码如下:
>>> import math
>>> print "PI=%r"%math.pi
PI=3.141592653589793
>>> print "Pi=%r"%int(math.pi)
Pi=3

真的是万能呀!别着急,看看这个,你是不是就糊涂了?

复制代码 代码如下:
>>> print "Pi=%s"%int(math.pi)
Pi=3

当然,这样就肯定出错了:

复制代码 代码如下:
>>> print "p=%d"%"pi"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str

如果看到这里,看官有点糊涂是很正常的,特别是那个号称万能的%r和%s,怎么都能够对原本属于%d的进行正常输出呢?

其实,不管是%r还是%s(%d)都是把做为整数的对象转化为字符串输出了,而不是输出整数。但是%r和%s是有点区别的,本讲对这个暂不做深入研
究,只是说明这样的对应:%s-->str();%r-->repr(),什么意思呢?就是说%s调用的是str()函数把对象转化为str
类型,而%r是调用了repr()将对象转化为字符串。关于两者的区别请参考:Difference between str and repr in
Python,下面是一个简单的例子,演示一下两者区别:

复制代码 代码如下:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2014, 8, 15)
>>> str(today)
'2014-08-15'
>>> repr(today)
'datetime.date(2014, 8, 15)'

最后要表达我的一个观点,没有什么万能的,一切都是根据实际需要而定。

关于更多的输出格式占位符的说明,这个页面中有一个表格,可惜没有找到中文的,如果看官找到中文的,请共享一下呀:string formatting

再扩展

复制代码 代码如下:
>>> myinfo
{'website': 'qiwsir.github.io', 'name': 'qiwsir', 'room': 703}
>>> print "qiwsir is in %(room)d"%myinfo
qiwsir is in 703

看官是否看明白上面的输出了?有点意思。这样的输出算是对前面输出的扩展了。

出了这个扩展之外,在输出的时候,还可以用一个名曰:format的东西,这里面看不到%,但是多了{}。看实验先:

复制代码 代码如下:
>>> print "My name is {0} and I am in {1}".format("qiwsir",703)     #将format后面的内容以此填充
My name is qiwsir and I am in 703
>>> "My website is {website}".format(website="qiwsir.github.io")    #{}里面那个相当于一个变量了吧
'My website is qiwsir.github.io'

看到这里,是不是感觉这个format有点意思?一点不输给前面的输出方式。据说,format会逐渐逐渐取代前面的。关于format,我计划后面一讲继续。这里只是来一个引子,后面把用format输出搞得多点。

Python之print详解的更多相关文章

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  2. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  3. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  4. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  5. python之数据类型详解

    python之数据类型详解 二.列表list  (可以存储多个值)(列表内数字不需要加引号) sort s1=[','!'] # s1.sort() # print(s1) -->['!', ' ...

  6. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  7. Python字符编码详解,str,bytes

    什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...

  8. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

  9. python协程详解,gevent asyncio

    python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...

随机推荐

  1. ElasticSearch Mapping中的字段类型

    1)string: 默认会被分词 2)数字类型主要如下几种: long:64位存储  integer:32位存储  short:16位存储  byte:8位存储  double:64位双精度存储  f ...

  2. UML对象图、包图

    对象图(Object Diagram)显示了一组对象和他们之间的关系.使用对象图阿狸说明数据结构,类图中的类或组件等实例的快照.对象图和类图一样,反应了系统的静态过程,但它是以实际的或原型化为基础来表 ...

  3. 【POJ 3177】Redundant Paths

    http://poj.org/problem?id=3177 又写了一遍手动栈... 把边双都缩点,缩成一棵树,答案就是树中度数为1的点的个数除2上取整. 为什么呢?因为1个度数为1的点的树需要多连0 ...

  4. [Codeforces #210] Tutorial

    Link: Codeforces #210 传送门 A: 贪心,对每个值都取最大值,不会有其他解使答案变优 #include <bits/stdc++.h> using namespace ...

  5. bzoj 2803 [Poi2012]Prefixuffix 兼字符串hash入门

    打cf的时候遇到的问题,clairs告诉我这是POI2012 的原题..原谅我菜没写过..于是拐过来写这道题并且学了下string hash.   字符串hash基于Rabin-Karp算法,并且对于 ...

  6. bzoj 2038 小Z的袜子(hose)(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 11542  Solved: 5166[Sub ...

  7. [BZOJ3576]江南乐

    挺好的题 我们算出每个数的sg值后异或起来即可 对于$n$,我们要求$sg_n$ 朴素的想法是枚举把$n$个石子分成$m$堆,有$m-n\%m$堆大小为$\left\lfloor\frac nm\ri ...

  8. 【动态规划+高精度】mr360-定长不下降子序列

    [题目大意] 韵哲君发现自己的面前有一行数字,当她正在琢磨应该干什么的时候,这时候,陈凡老师从天而降,走到了韵哲君的身边,低下头,对她耳语了几句,然后飘然而去. 陈凡老师说了什么呢,陈凡老师对韵哲君说 ...

  9. k-近邻算法 简单例子

    from numpy import * import operator def create_data_set(): # 训练集与标签 group = array([[1.0, 1.1], [1.0, ...

  10. codevs 1297 硬币

    1297 硬币  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 我们知道即使是同一种面值的硬币, ...