Python——脚本(calculator)

《Python基础教程》(第二版) P123

  书中原代码如下:

 1 class Calculator:
 2     def calculator(self,expression):
 3         self.value = eval(expression) #eval()是一个函数
 4
 5 class Talker:
 6     def talk(self):
 7         print "hi,my value is" ,self.value
 8
 9 class TalkingCalculator(Calculator,Talker):
10     pass

  然后在代码行输入:

  >>tc = TalkingCalculator()

  >>tc.calculator(‘1+2*3‘)

  >>tc.talk()

  输出:hi,my value is 7

  改成脚本后的代码如下:

 1 #!/usr/bin/env python
 2 #coding=TUF8
 3
 4 class Calculator:
 5     def calculator(self,expression):  #函数定义()中都是逗号‘,’
 6         self.value = eval(expression) #eval()是一个函数
 7
 8 class Talker:
 9     def talk(self):
10         print "hi,my value is" ,self.value
11
12 class TalkingCalculator(Calculator,Talker):
13     pass
14
15 tc = TalkingCalculator()
16 tc.calculator(‘1+2*3‘)    #输入的是字符串
17 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‘)2>>> 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  

 1 #!/usr/bin/env python
 2 #!coding=UTF8
 3 """
 4 fibs = [0,1]
 5 for i in range(8):
 6     fibs.append(fibs[-2]+fibs[-1])
 7 print fibs
 8 """
 9
10 fibs = [0,1]
11 num = input(‘what is you num:‘)
12 for i in range(num-2):
13 #    fibs = [0,1]
14     fibs.append(fibs[-2]+fibs[-1])
15 print fib
时间: 2024-11-03 21:32:29

Python——脚本(calculator)的相关文章

使用Python脚本强化LLDB调试器

LLDB是Xcode自带的调试器,作为一个iOS应用开发程序员,平时我在开发应用时会使用LLDB来调试代码.在逆向应用时,也会用到LLDB来跟踪应用的执行过程. LLDB还内置了一个Python解析器,使用Python脚本可以方便LLDB的调试,比如自动化执行一些命令,或者自动化处理数据之类的,具体说明可以参考官方的文档:LLDB Python Reference. 以下就以一个具体的例子来演示一个Python脚本的编写过程: 一.获取方法的偏移地址 运行系统自带的计算器Calculator.a

Python脚本远程批量执行命令

摘要 本文主要写用python脚本远程连接多台服务器,然后批量执行命令,最终返回命令执行结果. 这个可以说是Ansible,Puppet等工具的最简单的雏形. 做运维的同学应该都知道的. 正文 multi_task.py #_*_coding:utf-8_*_ import  multiprocessing import paramiko import getpass import ConfigParser class MultiTask(object):     '''handles all 

python脚本修改hosts文件

记一次使用python脚本来修改hosts文件,由于公司服务器需要换ip地址,服务器里都是Linux系统,而hosts文件中有些解析的ip,手动一台一台的解析太麻烦,就写了这个脚本.本来以为感觉很简单,但是写的过程真不好写,也试过shell脚本,不过也不好写.然后就直接用python写,也找了一些网上的教程,不过也没有很好的解决问题.下面把脚本贴出来记录下 #!/usr/bin/python #coding:utf8 import os import sys import re hostsfil

将Python脚本文件包装成可执行文件

将Python脚本文件包装成可执行文件,其目的有二: 一则: 不需要依赖Python编译器就可以运行软件 二则: 不想让自己的源码公布出去 常用的工具有: py2exe.cx_freeze等 [工具:py2exe] 安装py2exe 安装该工具很简单: 只需要从官方网站:http://www.py2exe.org/下载与版本对应的安装程序,点击下一步即可完成安装. 安装后,执行import py2exe,不报错则表示安装成功! >>> import py2exe >>>

用 Python 脚本实现对 Linux 服务器的监控

hon 分享到:8 原文出处: 曹江华 目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控. 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的编写. Python 版本说明 Python 是由 Guido va

Windows运行python脚本文件

开始学习python就是听说这个语言写脚本文件特别方便,简单使用.学了一段时间,但是直到现在我才直到直到怎么在Windows的cmd上运行脚本文件. 之前一直都是在pycharm上运行,并不实用. 百度上说的已经很清楚了,但是还是需要自己亲手实验一下.http://jingyan.baidu.com/article/22fe7ced18776f3002617f2e.html 我刚开始也是加了环境变量了 啊,但是一直不好使,原来我的程序开头没有加上  #!usr/bin/python  表示该脚本

【转载】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 &ndash; 指定文件编码类型

下面的内容来自:http://www.cnblogs.com/blueskylcc/p/5332642.html, 对方也是转的,不过没有找到转载的出处: 1.#!/usr/bin/python 是用来说明脚本语言是 python 的 是要用 /usr/bin下面的程序(工具)python,这个解释器,来解释 python 脚本,来运行 python 脚本的. 2.# -*- coding: utf-8 -*- 是用来指定文件编码为 utf-8 的 详情可以参考:PEP 0263 - Defin

python脚本删除n天之前的文件

管理Linux经常用到python脚本,然后写了脚本后,经常为了生成的文件占用磁盘空间而犯愁,这些写个函数以方便以后使用: def rmdaybefore(pfile, days):     """     Delete pfile diectory days before files below     :param pfile: local path     :param days: before days     :return: a list os.listdir p

zabbix邮件告警python脚本

#!/usr/bin/python # -*- coding: utf-8 -*- """ Zabbix SMTP Alert script from qq. auth:json """ import sys import email import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipar