4 总结

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'一直会执行的代码'
  • 什么时候进行异常捕捉?
  1. 在开发阶段可以不用异常捕捉,尽可能解决暴露出来的问题
  2. 上线之前,有选择性的添加异常代码
  • 怎么用?
  1. 捕获正确的异常,不要直接try except
  2. 异常的处理要合理,要有日志
  •  断言打印
  1. 了解python内置异常
  2. exc = sys.exc_info() 返回一个异常元组
  3. 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    #打印异常

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

posted on 2017-08-14 22:18  栗子测试  阅读(131)  评论(0编辑  收藏  举报