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. 脚 ...
随机推荐
- vue & keep-alive & activated
vue & keep-alive & activated vue 生命周期 钩子函数 缓存 http://www.cnblogs.com/nekoooo/p/6442077.html ...
- 计算机网络【9】—— HTTP1.0和HTTP1.1的区别及常见状态码
一.HTTP1.0与HTTP1.1的区别 1.HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理 HTTP 1.0规定浏览器与服务器只保持 ...
- python自动化之邮件发送
#!/usr/bin/env python # -*- coding:utf-8 -*- import smtplib from email.mime.multipart import MIMEMul ...
- GIT 旧库迁移到新库
1.在gitlab创建新项目,得到SSH地址2.用gitextent打开旧项目,记得所有分支合并成一个(如果确实无法合并,则需要一个个复位推送)3.复位到需要推送的节点分支4.打开菜单栏的档案库,管理 ...
- IoT与区块链的机遇与挑战
区块链, 分布式账本技术的一种形式, 自从2014年或多或少地获得了大量的关注: 区块链和物联网, 区块链和安全, 区块链和金融, 区块链和物流, 凡是你能想到的,仿佛都可以应用区块链. 在本文中, ...
- 【CF472G】Design Tutorial: Increase the Constraints
Description 给出两个01序列\(A\)和\(B\) 要求回答\(q\)个询问每次询问\(A\)和\(B\)中两个长度为\(len\)的子串的哈明距离 哈明距离的值即有多少个位置不相等 ...
- Java之链表实现栈结构
package com.wzlove.stack; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...
- Redis学习基础一
今天开始系统的学习redis基础知识,以往只是看redis的手册,貌似总是记不住.这次尝试手记笔记,使得印象更加深刻,从零开始学习.看是很慢,其实很快哟. 一.什么是Redis 至于什么是redis, ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
- 130. Surrounded Regions(M)
130.Add to List 130. Surrounded Regions Given a 2D board containing 'X' and 'O' (the letter O), capt ...