学习Python (八)

来源:互联网 发布:java程序员 常用软件 编辑:程序博客网 时间:2024/06/05 12:50

转载自龙腾测试

本次学习目标
1、模块
2、包
3、类和实例
4、异常
5、assert
6、with…as
7、python标准库
8、json和xml
9、数据库
10、smtp

1、模块
在python中,一个 .py文件就称之为一个模块(Module),模块能定义函数,类和变量。模块里也能包含可执行的代码,定义一下模块 print_name

print ‘this module name is print_name’
def func(name):
print “Hello:”,name

1.1 import
导入模块,导入模块时模块会被执行
import module1[,module2[,…moduleN]

导入模块

import print_name

调用模块中的函数

print name.func(‘jia’)

注:一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍的执行。

1.2 from…import
允许从一个模块文件里获取特定的变量名和函数。
语法如下:
from modname import name1[,name2[,…nameN]]

导入模块中的函数
from print name import func

调用函数
func(‘jia’)

1.3 reload
一个模块只会被导入一次,如果想重新导入模块需要reload()函数,语法如下:
reload(module_name)

导入模块

import print_name

重新导入模块

reload(print_name)

调用模块中的函数
print name.func(‘jia’)

1.4 _ _ name _ _

def func(name):
print “Hello:”,name

if _ _ name _ _ ==’ _ _ main _ _’:
func()

1.5 模块的搜索路径

import sys
sys.path
[‘D:\devpython’,’D:\Python27\Lib\idlelib’,
‘C:\Windows\system32\python27.zip’,’D:\Python27\DLLs’,
‘D:\Python27\lib’,’D:\Python27\lib\platwin’,’D:\Python27\lib\lib-tk’,
‘D:\Python27’, ‘D:\Python27\lib\site-packages’]

2 包
2.1 什么是包
pythond的代码目录就是包,包可以包含包和模块,包和普通目录有一点区别,包内必须要有_ _ init _ _ .py文件,该文件可以是空的,它表明该目录是一个python包
①包是目录
②目录必须有_ _ init _ _ .py
③目录可以包含目录,目录和子目录间用.分割

2.2 包导入
①import dir.mod
②from dir import mod
③from dir.mod import x

2.3 包的搜索路径
sys.path

2.4 创建包
①新建example目录
②example内新建_ _ init _ _ .py空文件,和testmodule模块
③example新建sub目录内同样放入,_ _ init _ _ .py testmodule.py

name = ‘张三’
print ‘this is a test module’
def test():
print ‘this is a module func’
return ‘func’

if_ _ name _ _ ==’ _ _ main _ _’:
test()

2.5 import 导入包内模块 方法一:

import example.testmodule

from…import…导入模块 方法二:

from example import testmodule
print testmodule.name

from…import…导入模块变量

from example.testmodule import name
print name

from…import导入包内子目录的模块

import example.sub.testmodule
print example.sub.testmodule.name

from…import导入包内子目录的模块

import example.sub.testmodule as m
print m.name

from example.sub import testmodule
print testmodule.name

3 类和实例
3.1 什么是类和实例
面向对象最重要的概念就是类和实例,类是抽象的模板,而实例是根据类创建出来的一个个具体的“对象”,每个实例都拥有相同的方法,但各自的数据可能不同,类使用class关键字创建。

3.2 创建一个类

class Person:
pass
p = Person()
print p

3.3 self
类的方法与普通的函数只有一个特别的区别,它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值,这个特别的变量指对象本身,按照惯例它的名称是self。

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

class Person:
def sayHi(self):
print ‘Hello,how are you?’
p = Person()
p.sayHi()

3.5 _ _ init _ _ 方法
_ _ init _ _方法在类的一个实例被建立时运行。这个方法用来对实例做一些初始化。

class Person:
def _ _ init _ _(self,name):
self.name = name
def sayHi(self):
print ‘Hello,my name is’,self.name
p = Person(‘jia’)
p.sayHi()

3.6 类和实例的变量
类的变量由一个类的所有实例共享使用。实例只有一个类变量的拷贝,所以当某个实例对类的变量做了改动的时候,这个改动会反映到所有其它的实例上。
实例的变量由类的每个实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然实例的变量有相同的名称,但是是互不相关的。

class Person:
”’定义人.”’
population = 0
def init(self, name):
”’初始化一个人.”’
self.name = name
print ‘(初始化 %s)’ % self.name
Person.population += 1
def sayHi(self):
print ‘Hi, 我叫%s.’ % self.name
def howMany(self):
if Person.population == 1:
print ‘只有我一个人.’
else:
print ‘我们有 %d 人.’ % Person.population

zhangsan = Person(‘张三’)
zhangsan .sayHi()
zhangsan .howMany()

lisi = Person(‘李四’)
lisi.sayHi()
lisi.howMany()

zhangsan.sayHi()
zhangsan.howMany()

3.7 继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
class SchoolMember:
”’定义学校成员”’
def _ _ init _ _ (self,name,age):
self.name = name
self.age = age
print’(初始化学校成员:%s)’% self.name

def tell(self):
”’成员细节”’
print ‘Name:”%s”Age:”%s”’ %(self.name,self.age)

定义老师
class Teacher(SchoolMember):
”’定义学校老师”’
def _ _ init _ _ (self,name,age,salary):
SchoolMember._ _ init _ _ (self,name,age)
self.salary = salary
print’(初始化学校老师:%s)’% self.name

def tell(self):
SchoolMember.tell(self)
print ‘工资:”%d”’ % self.salary

定义学生
class Student(SchoolMember):
”’定义学校学生”’
def _ _ init _ _ (self,name,age,marks):
SchoolMember. _ _ init _ _ (self,name,age)
self.marks = marks
print’(初始化学习学生:%s)’% self.name

def tell(self):
SchoolMember.tell(self)
print’分数:”%d”’% self.marks

t = Teacher(‘张三’,40,30000)
s = Student(‘李四’,22,75)

print #打印空行

members = [t,s]
for member in members:
member.tell() #遍历老师和学生

0 0