这是自己做的练习,可能有错误,欢迎讨论和各种优化重构方案。
根据反馈,或者code review,对本篇文章答案或者相关内容的更新补充,一般会被添加在本篇博客的评论中。
将尽量保证每题的答案代码是完整的,不仅仅是函数或者类,打开Python 2.7的IDLE,将代码完整拷贝进去,就能调试运行。
欢迎访问Balian在博客园的家。 http://www.cnblogs.com/balian
14-1.
可调用对象。说出Python中的可调用对象。exec语句和内建函数eval()有什么不同。
【答案】
Python中的可调用对象有三:
函数-包括内建函数(BIF),用户定义函数(UDF),lambda表达式
方法-包括内建方法(BIM),用户定义方法(UDM)
类-也就是类实例
exec语句是一个BIF。exec obj表示执行obj,obj可以是单一的Python语句或者语句的集合(即代码对象或者字符串)或者一个文件对象(一个被打开的Python脚本)。exec语句只有obj参数。参考该书第419页。
eval()接收括弧内的字符串,并把它作为Python表达式进行求值。eval()还有可选的的第二第三参数。参考该书第418页。
14-2.
input()和raw_input()。内建函数input()和raw_input()有什么不同?
这里附一个英文版书中的原题。
【答案】
input()为内建函数(BIF),是eval()和raw_input()的组合,即eval(raw_input())。
和raw_input()一样,input()有可选字符串参数,该参数是给用户的字符串提示。
raw_input()总是以字符串的形式,逐字返回用户的输入。
input()把输入作为Python表达式求值,返回一个Python对象。
【参考代码】
>>> b = input("Please input a formular: ... ") Please input a formular: ... 1 + 2 >>> b 3 >>> a = raw_input("Please input a formular: ..." ) Please input a formular: ...1 + 2 >>> a '1 + 2' >>>
14-3.
执行环境。创建运行其他Python脚本的Python脚本。
【答案】
代码如下:
>>> exec '''
... print 'Hello World!'
... '''
Hello World!
>>>
14-4.
os.system()。选择熟悉的系统命令,该命令执行任务时不需要输入,也不输出到屏幕或根本不输出任何东西。调用os.system()运行程序。附加题:将你的解决方案移植到subprocess.call()。
【答案】
这里选用系统命令dir > test.txt。Dir的结果是存放在test.txt文件中,所以这个命令不需要输入,也无输出到屏幕。
代码如下:
>>> import os >>> os.system("dir > test.txt") 0 >>>
附加题代码如下:
>>> import subprocess
>>> subprocess.call(('dir > test.txt'), shell = True)
0
>>>
14-5.
commands.getoutput()。用commands.getoutput()解决前面的问题。
【答案】
commands.getoutput()在unix平台才能运行。参考http://bugs.python.org/issue15073