《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)的更多相关文章

  1. 使用Python脚本强化LLDB调试器

    LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器 ...

  2. 通过Java调用Python脚本

    在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...

  3. freeswitch嵌入python脚本

    操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...

  4. python脚本后台运行

    问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...

  5. 某互联网后台自动化组合测试框架RF+Sikuli+Python脚本

    某互联网后台自动化组合测试框架RF+Sikuli+Python脚本 http://www.jianshu.com/p/b3e204c8651a 字数949 阅读323 评论1 喜欢0 一.**Robo ...

  6. 动态执行python脚本

    前言 存在许多独立的python脚本,这些脚本可能会增加,也可能会减少,现在需要按照某种顺序调度这些程序.在python的standard library中,有一个模块imp可以实现动态的调用ptho ...

  7. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本

    摘自:http://blog.csdn.net/forandever/article/details/5711319 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本 ...

  8. SecureCRT中python脚本编写

    SecureCRT中python脚本编写学习指南 SecureCRT python 引言 在测试网络设备中,通常使用脚本对设备端进行配置和测试以及维护:对于PE设备的测试维护人员来说使用较多是Secu ...

  9. Python脚本配合Linux计划任务工作

    经常遇到直接运行Python脚本没有问题,但是一放入/etc/crontab之后就歇菜的情况,总结了一下,大致需要注意以下几点: 1. 脚本首行加入#!/usr/bin/env python 2. 脚 ...

随机推荐

  1. 罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议

    1 关于面对批评 01. 没有人对被批评感到高兴.如果有,TA撒谎. 02. 面对批评,得体的第一反应是“不急于解释,不反唇相讥”. 03. 每天,或者最长每周养成习惯,把自己存在的问题和造成的麻烦用 ...

  2. java中的变量各占得字节数

    boolen,8位1个字节int,32位,4个字节float,32位 4个字节double,64位8个字节char 16位,2个字节byte 8位1个字节short 16位 2个字节long 64位 ...

  3. Matplotlib风羽自定义

    [前言]对于气象专业的小学生来说,风场是预报重要的参考数据,我们所知的风羽有四种:短线代表风速2m/s,长线代表风速4m/s,空心三角代表风速20m/s,实心三角代表风速50m/s.而matplotl ...

  4. java的object类函数详解

    1.clone方法(浅拷贝) 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. 主要是JAVA里除了8种 ...

  5. c++11 函数模板的默认模板参数

    c++11 函数模板的默认模板参数 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...

  6. 【BZOJ2989】数列(CDQ分治,扫描线)

    [BZOJ2989]数列(CDQ分治) 题面 BZOJ 权.....权限题.. 题解 Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和 ...

  7. 【模板】网络流-最大流模板(Dinic)

    #include <cstdio> #include <cstring> #include <algorithm> #include <queue> u ...

  8. BZOJ2159 Crash 的文明世界 【第二类斯特林数 + 树形dp】

    题目链接 BZOJ2159 题解 显然不能直接做点分之类的,观察式子中存在式子\(n^k\) 可以考虑到 \[n^k = \sum\limits_{i = 0} \begin{Bmatrix} k \ ...

  9. CF1009F Dominant Indices 解题报告

    CF1009F Dominant Indices 题意简述 给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每 ...

  10. java 操作命令行

    目的:用java进行调用ab压测 window: cmd ab.exe linux: sh  ab.sh 命令: abs -n 500 -c 10 https://www.baidu.com/ > ...