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. 脚 ...
随机推荐
- 计算机网络【2】—— CSMA/CD协议
参考文献: https://blog.csdn.net/loveCC_orange/article/details/79177129 一.认识以太网 最早的以太网是将许多计算机都连接到一根总线上. 使 ...
- 用join取代not in
写了好几个页面,速度都上不去,瓶颈在于SQL查询.太多的表,太多的not in,总是从一大推表和数据中筛选出一点数据.看了很多关于SQL优化的文章,都强烈要求不要太多使用not in查询,最好用表连接 ...
- linux中man 2与man 3区别
1.Standard commands (标准命令)2.System calls (系统调用)3.Library functions (库函数)4.Special devices (设备说明)5.Fi ...
- Java EE之JSTL(下)
3.使用国际化和格式化标签库(FMT命名空间) 如果你希望创建部署在Web上,并面向庞大的国际化用户的企业级Java应用程序,那么你最终需要为世界的特定区域进行应用程序本地化.这将通过国际化实现(通常 ...
- 【纪中集训2019.3.12】Z的礼物
题意 已知\(a_{i} = \sum_{j=1}^{i} \{^{i} _{j} \}b_{j}\), 给出\(a_{1} 到 a_{n}\) : 求\(b_{l} 到 b_{r}\)在\(1e9+ ...
- Linux查看动态库.so导出函数列表
https://blog.csdn.net/chrisnotfound/article/details/80662923
- JavaScript搜索关键字高亮的实现
高亮功能主要是指对页面中指定区域的指定文字进行高亮显示,也就是背景着色.一般在搜索结果页面会经常用到这个功能. 下面就为大家提供一种解决方案,用javascript实现. 首先在<head> ...
- Linux系统时间函数
先来说说自己在做工程过程中的一些理解: 1, 输入time_t,输出tm格式的函数 loctaltime(time_t) / gmtime(time_t) 其中localtime会受时区和夏令时影响, ...
- android listview使用自定义的adapter没有了OnItemClickListener事件解决办法
在使用listview的时用使用自定义的adapter的时候,如果你的item布局中包含有Button,Checkable继承来的所有控件,那么你将无法获取listview的onItemClickLi ...
- Spark记录-Scala数据类型
Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 ...