Python——脚本(calculator)

Posted zhuzhu2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于Python——脚本(calculator)的主要内容,如果未能解决你的问题,请参考以下文章

广东海洋大学 电子1151 孔yanfei python语言程序设计 第八周

广东海洋大学 电子1151 孔yanfei python语言程序设计 第八周

了解 Python 闭包

Python 模块管理

python python_time_calculation_for_exicution.py

Python 模块管理1