跟老齐学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完全新手教程
Feb 08 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
python发送邮件脚本
May 22 Python
django中SMTP发送邮件配置详解
Jul 19 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
python实现在一个画布上画多个子图
Jan 19 Python
Pycharm连接远程服务器过程图解
Apr 30 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
如何用python写个模板引擎
Jan 14 Python
Python实现8种常用抽样方法
Jun 27 Python
Python中第三方库Faker的使用详解
Apr 02 Python
python自动获取微信公众号最新文章的实现代码
Jul 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
js禁止表单重复提交
2017/08/29 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
毕业大学生自荐信
2014/06/17 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
初三数学教学反思
2016/02/17 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL