Python——脚本(calculator)
《Python基础教程》(第二版) P123
书中原代码如下:
class Calculator:
def calculator(self,expression):
self.value = eval(expression) #eval()是一个函数 class Talker:
def talk(self):
print "hi,my value is" ,self.value class TalkingCalculator(Calculator,Talker):
pass
然后在代码行输入:
>>tc = TalkingCalculator()
>>tc.calculator('1+2*3')
>>tc.talk()
输出:hi,my value is 7
改成脚本后的代码如下:
#!/usr/bin/env python
#coding=TUF8 class Calculator:
def calculator(self,expression): #函数定义()中都是逗号‘,’
self.value = eval(expression) #eval()是一个函数 class Talker:
def talk(self):
print "hi,my value is" ,self.value class TalkingCalculator(Calculator,Talker):
pass tc = TalkingCalculator()
tc.calculator('1+2*3') #输入的是字符串
tc.talk()
本例中:
1.注意到在tc.calculator('1+2*3')输入的字符串而不是数字,返回结果是数字。
原因是eval()是一个函数——eval参数是一个字符串,可以把这个字符串当成表达式来求值。不管输入是什么形式,表达式都必须为字符串即带引号(' ')
eval()函数可以对数字,字母,字符串,列表,元组进行操作,对字典的操作有限制。
例如:
>>> a = {'a': 'am',b:'baby'} #字符串要加引号(‘’)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined >>> a = {'a': 'am','b':'baby'}
>>> eval(a) #eval()括号中表达式必须是字符串(带引号‘’)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: eval() arg 1 must be a string or code object >>> eval('a')
{'a': 'am', 'b': 'baby'}
>>> x = {'a': 'am','b':'baby'}
>>> eval(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: eval() arg 1 must be a string or code object >>> eval('x')
{'a': 'am', 'b': 'baby'}
>>> y = eval('x')
>>> y
{'a': 'am', 'b': 'baby'}
>>> m = {'c':'crumb'}
>>> eval('x+m') #字典不可以相加
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'dict' and 'dict' >>> x = 1
>>> y = 2
>>> eval('x+y') #数字可以
3 >>> x = 'a'
>>> y = 'b'
>>> eval('x+y') #字符串可以(字母可以)
'ab' >>> x = ['a','b']
>>> eval('x')
['a', 'b']
>>> y = ['c','d']
>>> eval('x+y') #列表[ ]可以
['a', 'b', 'c', 'd'] >>> x = ('a','b')
>>> eval('x')
('a', 'b')
>>> y = ('c','d')
>>> eval('x+y') #元组( )可以
('a', 'b', 'c', 'd') >>> x = 'hello'
>>> y = 'world'
>>> eval('x+y') #字符串可以
'helloworld' >>> A = 1
>>> eval('A+1') >>> eval('A == 1') #可以进行判断
True
>>> eval('A == 0')
False
其他有关eval函数的参考:www.tuicool.com/articles/BBVnQbq
参数self:只在类中有,单独的def脚本没有self
类(class)初始化之后会得到实例(instance)。self就是用于代表初始化的到的实例。
明确地写一个self参数,使得类的方法(method)和普通的函数(function)本质上没有差异,所有的输入参数都显示地传递到方法/函数当中。
当然作为类的方法,作用的对象一定会是实例,因而在Python的设计之初,完全可以设计成self不作为一个参数,但是那样就需要一个关键字代表实例,比如在javascript中就是this。
然而Python的哲学是"Explicit is better than implicit.",显示要比隐示好,因此Python类的方法需要一个self参数代表实例是符合逻辑的。
如下脚本:如下代码中就没有self
#!/usr/bin/env python
#!coding=UTF8
"""
fibs = [0,1]
for i in range(8):
fibs.append(fibs[-2]+fibs[-1])
print fibs
""" fibs = [0,1]
num = input('what is you num:')
for i in range(num-2):
# fibs = [0,1]
fibs.append(fibs[-2]+fibs[-1])
print fib
Python——脚本(calculator)的更多相关文章
- 使用Python脚本强化LLDB调试器
LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器 ...
- 通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- freeswitch嵌入python脚本
操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...
- python脚本后台运行
问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...
- 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本
某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...
- 动态执行python脚本
前言 存在许多独立的python脚本,这些脚本可能会增加,也可能会减少,现在需要按照某种顺序调度这些程序.在python的standard library中,有一个模块imp可以实现动态的调用ptho ...
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...
- SecureCRT中python脚本编写
SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是Secu ...
- Python脚本配合Linux计划任务工作
经常遇到直接运行Python脚本没有问题,但是一放入/etc/crontab之后就歇菜的情况,总结了一下,大致需要注意以下几点: 1. 脚本首行加入#!/usr/bin/env python 2. 脚 ...
随机推荐
- Delphi 判断一个字符串是否为数字
//函 数 名: IsDigit//返 回 值: boolean//日 期:2011-03-01//参 数: String//功 能: 判断一个字符串是否为数字// ...
- java 加载过程
1.main方法进入方法区 2.main方法进栈 3.调用xxx类加载到jvm中 类属性进入数据共享区,方法进入到方法区
- Ubuntu修改中文目录为英文
1.安装需要的软件 sudo apt install xdg-user-dirs-gtk 2.临时转换系统语言为英文,重启后会自动恢复原值的 export LANG=en_US 3.执行转换命令,弹出 ...
- excel 技能收集
排序: 对某D列第4行开始的数据排序,对D4之后的700个数据全部排序 =RANK(D4,$D$4:$D$700)
- Xcode一个project生成多个App
网上有很多奇奇怪怪的复杂的方案,其实误导了,方法很简单: 打开项目属性 修改Bundle Identifiler 随便生成了四个App,如下所示:
- [POI2018]Powódź
Description 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水 箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格 ...
- PDF文档小技巧整理一览
1.福昕阅读器文档背景修改为保护眼睛的颜色? 1)文件 -> 偏好设置 -> 访问 -> 勾选 "改变文档颜色" 2)选择 '自定义颜色'->'页面背景颜色 ...
- Chapter8(IO库) --C++Prime笔记
1.IO对象不能拷贝或对IO对象赋值,进行IO操作的函数通常是以引用方式传递和返回流. 2.一个流一旦发生错误,其上的后续的IO操作都会失败.代码通常应该在使用一个流之前检查它是否处于良好状态.确定一 ...
- python 几种不同的格式化输出
1. % %是最常用的格式化输出形式,后面接类型,%s,%d,%c等等 name = input() print('I am %s' % name) 2.format format也是常用格式化输出 ...
- Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.