五、python的函数、类、异常
函数:
定义函数:def fun(para1,para2,...),圆括号不能少。
函数可以有多个返回值,通常被封装成元组返回。你不封装会自动封装
函数也是对象,可以做参数传递和返回
思考方法的重载和重写问题???先弄清楚为什么需要重载和重写
-------------------------------------
def fun1(): #括号必须要
return u"无参数,无返回值"
def fun2(x):
print u"有参数,有返回值"
return x,True,None,"hello"
x,y,z,w=fun2("python")
a=fun2(u"你好")
print fun1()
print x,y,z,w
print a
#简单的函数式编程
def handleText(text):
print 'text '+text
def handleHtml(html):
print 'html '+html
def msg(x):
if x == "html":
return handleHtml #不能加上空的圆括号
else :
return handleText
msg("text")("hello world")
--------------------------------------
类:
定义类: calss a
经典类和新式类:区别是经典类不继承Object,而新式类要继承Object
继承: class a(b) 类a继承b类
多重继承: class a(b,c)
构造函数: def __init__
self 相当于java中this
---------------------------------------------
#定义一个经典类
class a() :
pass
a=a() #创建一个对象
#定义一个新式类
class b(object) :
pass
b=b()
#定义一个带有构造器的类
class A():
def __init__(self,x,y):
self._x=x
self._y=y
def __str__(self):
return self._x + " " + self._y
a=A("hello","world")
print a
-------------------------------------------------------
异常处理:
try : .... except : ...
常见的异常:
KeyError 没有key异常
indexError 数组下标越界
NameError 没有该变量
ValueError 没有对应的值
支持else分支,如果么有异常,则执行else分支代码块
------------------------------------------------------
#异常
a=dict(name="zhangsan",age=19) #dict是定义字典的
#print a["sex"] #会报错为KeyError
try:
print a["sex"]
except :
print "no key error"
print "exception is ok" #如果以上正常捕捉异常则会执行该语句,反之不会
#indexError和else
a=range(1,10)
#a=range(1,20)
#a[11]=100 #会报错为indexError
try:
a[11]=100
except IndexError:
print "index out of tuple"
else :
print a[11]
--------------------------------------------------------
模块:
用模块组织代码
通过导入共享代码
import ... as ...
使用模块中的内容
dir()列出模块中的内容
help()查出模块中的帮助信息
-------------------------------------------------
先重新建立一个python文件叫demo:
#!/usr/bin/python
#-*-coding:utf8-*-
class A():
pass
def fun():
return "hello python"
#如下是原来文件中的代码:::
#模块引入
import demo
import demo as d #名字长咯可以起别名
print demo.fun()
print d.fun()
a = d.A() #创建对象
#只引入文件中的一部分,当文件内容太多时
from demo import fun,A as a #引入指定的部分
print fun() #引入的指定部分已经加载到该文件的命名空间中
a=a()
#查看引入内容
dir(d)
#help(d) #好像不支持
-----------------------------------------------------