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. 脚 ...
随机推荐
- UVA12538 Version Controlled IDE
题意翻译 维护一种数据结构,资磁三种操作. 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1≤n≤50000,所有字符串总 ...
- matplotlib + pandas绘图
利用pandas处理日期数据,并根据日期绘制增长率曲线. 处理的json文本内容如下: # pd.json [{"name": "A", "date& ...
- java递归方法求数组最大元素
一直对递归写法不是很熟悉,特写一个增进理解 /** * Created by Administrator on 2017-11-01. */ public class recursion { priv ...
- 51nod 1564 区间的价值 | 分治 尺取法
51nod 1564 区间的价值 题面 一个区间的价值是区间最大值×区间最小值.给出一个序列\(a\), 求出其中所有长度为k的子区间的最大价值.对于\(k = 1, 2, ..., n\)输出答案. ...
- 洛谷 P1972 [SDOI2009]HH的项链 解题报告
P1972 [SDOI2009]HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断 ...
- 20165218 《网络对抗技术》Exp2 后门原理与实践
Exp2 后门原理与实践 准备工作 1. 查看Linux和Win的IP地址,ping通 Linux地址 Win7地址 ping 2.下载ncat并装载到win7主机 3.下载socat并装载到win7 ...
- 设计模式 (一)——策略模式(Strategy,行为型)
1.概述 使用设计模式可以提高代码的可复用性.可扩充性和可维护性.策略模式(Strategy Pattern)属于行为型模式,其做法是将类所需的行为或者算法一个个封装成单独的类,并将其作为类的数据成员 ...
- Android应用自动更新功能的实现!
Android应用自动更新功能的实现!http://blog.csdn.net/android_tutor/article/details/7015986 private static final i ...
- LGP4577【JSOI2018】战争
题解: 求出$A$ 和$-B$ 的$Minkowsiki$和再$O(logn)$判断一个点是否在凸包内: $Minkowsiki$的求法比较容易忘,要多多温习才可以: #include<bits ...
- MySQL 第五篇:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...