一、面向对象的编程:

 

  • 面向过程的编程根据操作数据的函数或语句块来设计程序的。这被称

  • 面向对象的编程:把数据和功能结合起来,用称为对象的东西包裹起来组织程序

的方法。这种方法称为面向对象的 编程理念。

  • 类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象这个类的实例 。这类似于你有一个int类型的变量,这存储整数的变量是int类的实例(对象)。

  • 怎么创建类:类使用class关键字创建。类的域和方法被列在一个缩进块中。

 

  • 类的组成:对象可以使用普通的属于     对象的变量存储数据。属于一个对象或类的变量被称为。对象也

可以使用属于 类的函数来具有功能。这样的函数被称为类的方法

 

  • 域有两种类型——属于每个实例/类的对象或属于类本身。它们分别被称为实例变量类变

量。

 

 

  • self类对象:

类的方法(意思是在类里面定义方法)与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。

这个特别的变量指对象本身,按照惯例它的名称是self

 

 

  • 创建一个类:

#!/usr/bin/python

# Filename:simplestclass.py

class Person:

pass #An empty block表示一个空块

p = Person()

print p

 

  • 对象的方法:

/对象可以拥有像函数一样的方法,这些方法与函数的区别只是一个额外的self变量。

#!/usr/bin/python

# Filename:method.py

class Person:

def sayHi(self):

print 'Hello, howare you?'

p = Person()

p.sayHi()

 

 

  • __init__方法:

 

__init__方法在类的一个对象被建立时,马上运行。

 

这个方法可以用来对你的对象做一些你希望的初始化

#!/usr/bin/envpython

 

class person:

        pass

 

class myob:

        def __init__(self,name):

                self.a=1

                self.name=name

        def abc(self):

 

                print 'hello,how areyou?',self.a,self.name

 

p=person()

print p

 

a=myob('victor')

a.abc()

 

 

 

 

  • 类的变量和对象的变量:

 

#!/usr/bin/envpython

 

class person:

        population=0

        def __init__(self,name):

                self.name=name

                person.population+=1

 

        def howMany(self):

                print "now there are:",self.population

 

        def sayHello(self):

                '''say hello when add a newperson'''

                if person.population==1:

                        print 'i am the onlyperson'

                else:

                        print 'hi, i am new, myname is',self.name

 

        def __del__(self):

                '''i am dying'''

                print '%s saygoodbye'%self.name

                person.population-=1

                if person.population==0:

                        print 'i am the lastperson'

                else:

                        print 'still have %sperson left'%person.population

 

 

 

p=person('david')

p.sayHello()

p.howMany()

 

p1=person('davidy')

p1.sayHello()

p1.howMany()

 

 

docstring对于类和方法同样有用。我们可以在运行时使用Person.

__doc__Person.sayHi.__doc__来分别访问类与方法的文档字符串。

如果你使用的数据成员名称以双下划线前缀 比如__privatevarPython的名称

管理体系会有效地把它作为私有变量。如果某个变量只想在类或对象中使用,就应该以单下划线前缀。

 

 

  • 继承:

。一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可

以被视作是父类的实例,这种现象被称为多态现象

我们会发现在重用 父类的代码的时候,我们无需在不同的类中重复它。而如果我们使

用独立的类的话,我们就不得不这么做了。在上述的场合中,SchoolMember类被称为基本类 或 超类 。而TeacherStudent类被称为 子类

如果在继承元组中列了一个以上的类,那么它就被称作多重继承

#!/usr/bin/envpython

 

class School:

        def __init__(self,name,age):

                self.name=name

                self.age=age

        def tell(self):

                print 'my name is',self.name

                print 'my age is %s'%self.age

classTeacher(School):

        def __init__(self,name,age,salary):

                School.__init__(self,name,age)

                self.salary=salary

        def tell(self):

                print 'the teacher salay is%s'%self.salary

                School.tell(self)

classStudent(School):

        def __init__(self,name,age,mark):

                School.__init__(self,name,age)

                self.mark=mark

        def tell(self):

                print 'the student mark is%s'%self.mark

                School.tell(self)

 

 

a=Teacher('teacherchen',21,20000)

b=Student('studentchen',22,90)

 

a.tell()

b.tell()

 

二、输入、输出

 

  • 创建、读写文件:

完成对文

件的操作的时候,你调用close方法来告诉Python我们完成了对文件的使用。注意:不管是写文件或者读文件都需要调用 close方法。模式可以为读模式

'r')、写模式('w')或追加模式('a')。事实上还有多得多的模式可以使用,你可以使help(file)来了解它们的详情。

#!/usr/bin/envpython

 

def po():

        poem='''\

abcd efg lala

pyton python so good

i love you!!!

'''

        a=file('/poem.txt','w')

#指明我们希望打开的文件和模式来创建一个file类的实例。

        a.write(poem)

        a.close()

 

 

        b=file('/poem.txt')

        while True:

 

                line=b.readline()

                if len(line)==0:

                        break

                print line

 

        b.close()

po()

 

  • 存储器:

 

Python提供一个标准的模块,称为pickle。使用它你可以在一个文件中储存任何Python对象,之

后你又可以把它完整无缺地取出来。这被称为持久地 储存对象。

 

#!/use/bin/en python

 

import cPickle as p

 

mylist=['apple','banana','carot']

shoplistfile='shoplist.data'

print 'shoplistfileis:',shoplistfile

print 'mylistis:',mylist

a=file('/root/shoplistfile','w')

p.dump(mylist,a)

a.close()

 

del mylist

#print 'mylistis:',mylist

b=file('/root/shoplistfile')

mylist2=p.load(b)

print 'new listis:',mylist2

b.close()

 

 

三、异常:

  • try..except

#!/usr/bin/python

# Filename:try_except.py

import sys

try:

s = raw_input('Entersomething --> ')

except EOFError:

print '\nWhy did youdo an EOF on me?'

sys.exit() # exitthe program

except:

print '\nSomeerror/exception occurred.'

# here, we are notexiting the program

print 'Done'

 

如果没有给出错误或异常的名称,它会处理所有的 错误和异常。对于每个try从句,至少都有一个相关联的except从句。

 

  • 引发异常:

你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你

可以引发的错误或异常应该分别是一个ErrorException类的直接或间接导出类。

你还可以让try..catch块关联上一个else从句。当没有异常发生的时候,else从句将被执行

#!/usr/bin/envpython

 

 

class  ShortInputException(Exception):

#继承

        def __init__(self,length,least):

                Exception.__init__(self)

                self.length=length

                self.least=least

try:

        s = raw_input('Enter something -->')

        if len(s)<3:

                raiseShortInputException(len(s),3)

except EOFError:

        print '\nWhy did you do an EOF on me?'

except ShortInputException,x:

#提供了错误类和用来表示错误/异常对象的变量。

        print 'ShortInputException: The inputwas of length %d,the expected at least value is %d'%(x.length,x.least)

 

 

  • Try  finally:

 

假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件.

 

#!/usr/bin/python

# Filename:finally.py

import time

try:

        f = file('/poem.txt')

        while True: # our usual file-readingidiom

                line = f.readline()

                if len(line) == 0:

                        break

                time.sleep(2)

                print line,

finally:

        f.close()

        print '\nCleaning up...closed the file'

 

 

 

 

四、python标准库:

Python标准库是随Python附带安装的,它包含大量极其有用的模块主要讲了2个模块:sys   os   

  • sys模块:sys模块包含系统对应的功能

sys.stdinsys.stdoutsys.stderr分别对应标准输入/输出/错误流。

#!/usr/bin/python

# Filename: cat.py

import sys

defreadfile(filename):

        '''Print a file to the standardoutput.'''

        f = file(filename)

        while True:

                line = f.readline()

                if len(line) == 0:

                        break

                print line, # notice comma

        f.close()

 

if len(sys.argv)< 2:

        print 'No action specified.'

        sys.exit()

 

 

ifsys.argv[1].startswith('--'):

        option = sys.argv[1][2:]

        if option == 'version':

                print 'Version 1.2'

        elif option == 'help':

                print 'gouri'

 

        else:

                print 'Unknown option.'

                sys.exit()

else:

        for filename in sys.argv[1:]:

                readfile(filename)

 

 

  • os模块:

这个模块包含普遍的操作系统功能。

这个模块允许即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在

LinuxWindows下运行。

os.name字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix

用户,它是'posix'

os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。

os.getenv()os.putenv()函数分别用来读取和设置环境变量。

os.listdir()返回指定目录下的所有文件和目录名。

os.remove()函数用来删除一个文件。

os.system()函数用来运行shell命令。

os.linesep字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n'Linux使

'\n'Mac使用'\r'

os.path.split()函数返回一个路径的目录名和文件名。

os.path.isfile()os.path.isdir()函数分别检验给出的路径是一个文件还是目录。类似地,os.

path.exists()函数用来检验给出的路径是否真地存在。

 

 

 

五、更多的python内容:

  • 列表综合:

#!/usr/bin/python

# Filename:list_comprehension.py

listone = [2, 3, 4]

listtwo = [2*i for i in listone if i >2]

print listtwo

 

  • 在函数中接收列表或者元组:

当要使函数接收元组或字典形式的参数的时候,有一种特殊的方法,它分别使用***前缀

 

由于在args变量前有*前缀,所有多余的函数参数都会作为一个元组存储在args中。如果使用的

**前缀,多余的参数则会被认为是一个字典的键/值对。

#!/usr/bin/envpython

 

 

defpowersum(power,*args):

        total=0

 

        for i in args:

                total+=pow(i,power)

        print total

 

 

powersum(2,3,4)

powersum(2,3)

 

 

  • Lambda形式:

 

lambda语句被用来创建新的函数对象,并且在运行时返回它们。

#!/usr/bin/python

# Filename:lambda.py

defmake_repeater(n):

return lambda s: s*n   s表示新函数的参数

twice =make_repeater(2)

print twice('word')

print twice(5)

 

  • execeval语句

 

exec语句用来执行储存在字符串或文件中的Python语句。

eval语句用来计算存储在字符串中的有效Python表达式

>>>eval('2*3')

6

  • assert语句:

assert语句用来声明某个条件是真的。

>>> mylist= ['item']

>>> assertlen(mylist) >= 1

>>> mylist.pop()

'item'

>>> assertlen(mylist) >= 1

Traceback (mostrecent call last):

File"<stdin>", line 1, in ?

AssertionError

 

 

  • repr函数:

repr函数用来取得对象的规范字符串表示。

 

六、最后,我们来编写一个程序:

创建你自己的命令行地址簿 程序。在这个程序中,你可以

添加、修改、删除和搜索(字典方法的使用)你的联系人(朋友、家人和同事(类的使用)等等)以及它们的信息(诸如电子邮

件地址/电话号码)。这些详细信息应该被保存下来cPickle)以便以后提取。

 自己写的很仓促,还缺乏交互性等一些优化。

#!/usr/bin/envpython

 

import cPickle as p

class people:

        zidian={}

        print 'initiated dic is',zidian

 

        def add(self,name,mobile):

                people.zidian[name]=mobile

                a=file('/root/zidian.txt','w')

                p.dump(people.zidian,a)

                a.close()

                print 'after add one person,the dic is',people.zidian

        def upd(self,name,mobile):

                people.zidian[name]=mobile

                a=file('/root/zidian.txt','w')

                p.dump(people.zidian,a)

                a.close()

                print 'after update one person,the dic is',people.zidian

        def dele(self,name):

                del people.zidian[name]

                print 'after delete the dicitmes:',people.zidian

        def query(self,name):

                if people.zidian.has_key(name):

                        print '%s mobile is%s'%(name,people.zidian[name])

 

                else:

                        print 'no informationabout this person'

 

 

person=people()

person.add('chen','13912344')

person.add('zu','14')

person.upd('chen','123')

person.dele('zu')

person.query('chen')