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语言程序设计 第八周