1 函数
参数类型:必选参数、可选参数、数组参数、字典参数
1 #必选参数 2 def add(n1, n2): 3 return n1+n2 4 5 #调用 6 print add(1,2) 7 8 #结果 9 3
1 #可选参数 2 def add(n1=1, n2=21): 3 return n1+n2 4 5 #调用 6 print add() 7 8 #结果 9 22
1 #元组参数 2 def add(*num): 3 d = 0 4 for i in num: 5 d += i 6 return d 7 8 #调用 9 print add(1,2,3,4,5,6,7,8,9,10) 10 11 #结果 12 55
1 #字典参数 2 def add(**num): 3 d = 0 4 for key in num: 5 d += num[key] 6 return d 7 8 #调用 9 print add(num1=1,num2=21,num3=2) 10 11 #结果 12 24
健壮性
1 #可选参数 2 def add(n1=1, n2=21): 3 if isinstance(n1, int) and isinstance(n2, int): 4 return n1+n2 5 else: 6 return 'It is not int' 7 8 #调用 9 print add(1,44) 10 print add('a', 44) 11 12 #结果 13 45 14 It is not int
参数顺序
- def func(a, b=1, *args, **kwargs):
函数编写规范:
- 命名规范:见名知意(下划线命名法、驼峰命名法)
- 功能完整
- 异常处理(参数类型判断、运行时异常处理) -- 健壮
- 函数功能、参数类型、返回类型
- 测试:不同类型参数测试、返回值和类型测试、单元测试
递归函数:
1 #递归 2 def func(i): 3 if i<100: 4 return i + func(i+1) 5 return i 6 7 #调用 8 print func(0) 9 10 #结果 11 5050
2 模块
导入模块
- 添加路径
import sys
sys.path.append('/tmp/test')
- 导入模块
import 模块名
from 模块名 import 方法名 as 别名
from 模块名 import *
- 限制 import *
__all__ = [方法名1,方法名2] (表示只能使用文件中的方法1 和 方法2)
__all__可以写在.py文件中,也可以写在__init__.py文件中
测试模块
- if __name__=='__main__': (单独运行文件时才会执行,测试用例可以放在其中)
常用模块
- python模块库:https://pypi.python.org/pypi
- python内置模块:https://docs.python.org/2.7/ - Library Reference
- 模块用法:help(模块名) 可以找到模块文档的地址
- 常用模块:time、datetime、os、logging、pickle
- 举例:
import pickle 对象序列化,对象持久化保存,将对象存储在文本等里面
pickle.dump(对象) 序列化
pickle.loads(对象) 反序列化
3 异常处理
异常在解释器运行时抛出的Error
- 异常格式
try: 会抛出异常的代码 异常下方的代码是不会执行的 except IOError, e:(打不开网页异常) 捕捉到打不开网页的异常后,如何处理 except:(语法异常) 捕捉到语法异常后,如何处理 else: 没有捕捉到异常,如何处理 finally: 不管如何种会执行
- 异常举例
1 import urllib 2 url = 'http://www..com' 3 try: 4 d = urllib.urlopen(url) 5 except IOError, e: 6 print u'出错了!' 7 else: 8 content = d.read() 9 finally: 10 print u'一直会执行的代码'
- 什么时候进行异常捕捉?
- 在开发阶段可以不用异常捕捉,尽可能解决暴露出来的问题
- 上线之前,有选择性的添加异常代码
- 怎么用?
- 捕获正确的异常,不要直接try except
- 异常的处理要合理,要有日志
- 断言打印
- 了解python内置异常
- exc = sys.exc_info() 返回一个异常元组
- print exc 打印异常
- 自定义异常
1 #自定义异常 2 class myException(Exception): 3 def__init__(self, error, msg): 4 self.args = (error, msg) 5 self.error = error 6 self.msg = msg 7 8 try: 9 raise myException(1, 'my exception') 10 except Exception as e: 11 print str(e)
- 文件操作
1 #自定义异常 2 class myException(Exception): 3 def__init__(self, error, msg): 4 self.args = (error, msg) 5 self.error = error 6 self.msg = msg 7 8 try: 9 raise myException(1, 'my exception') 10 except Exception as e: 11 print str(e)
- 使用with操作文件
1 #文件操作常用方法 2 f = open('a', 'r') 3 d.read() 4 d.close() 5 6 #with语句 7 with open('a', 'r') as f: 8 e = f.read() 9 #使用with不需要关闭文件 10 12 #自定义 13 class sth(object): 14 def __enter__(self): 15 print u'登录' 16 def __exit(): 17 print u'退出' 18 #有__enter__()和__exti__()方法的才可以使用with
- 普通变成和with读取文件的基础
1 #文件操作常用方法 2 f = open('a', 'r') 3 d.read() 4 d.close() 5 6 #with语句 7 with open('a', 'r') as f: 8 e = f.read() 9 #使用with不需要关闭文件 10 11 12 #自定义 13 class sth(object): 14 def __enter__(self): 15 print u'登录' 16 def __exit(): 17 print u'退出' 18 #有__enter__()和__exti__()方法的才可以使用with 19 20 #python内置异常 22 exc = sys.exc_info() 返回一个元组 23 print exc 打印异常
- 打印异常
1 #python内置异常 2 exc = sys.exc_info() #返回一个元组 3 print exc #打印异常
哦