跟老齐学Python之print详解


Posted in Python onSeptember 28, 2014

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 相关文章推荐
Python实现子类调用父类的方法
Nov 10 Python
Python中的包和模块实例
Nov 22 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
python2.7 mayavi 安装图文教程(推荐)
Jun 22 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
pytorch打印网络结构的实例
Aug 19 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
python str字符串转uuid实例
Mar 03 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python和php哪个更适合写爬虫
Jun 22 Python
详解python logging日志传输
Jul 01 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
跟老齐学Python之正规地说一句话
Sep 28 #Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 #Python
跟老齐学Python之不要红头文件(2)
Sep 28 #Python
跟老齐学Python之不要红头文件(1)
Sep 28 #Python
python自动化测试之连接几组测试包实例
Sep 28 #Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 #Python
跟老齐学Python之有容乃大的list(4)
Sep 28 #Python
You might like
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python笔记之facade模式
2019/11/20 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
html通过canvas转成base64的方法
2019/07/18 HTML / CSS
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
植村秀加拿大官网:Shu Uemura加拿大
2019/09/03 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
客户表扬信范文
2014/01/10 职场文书
货车司机岗位职责
2014/03/18 职场文书
七匹狼男装广告词
2014/03/21 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
爱国主义电影观后感
2015/06/18 职场文书
幼儿园秋季开学通知
2015/07/16 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
python基础之匿名函数详解
2021/04/21 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis