python函数
1.定义:高可用的模块性重复代码
内置函数,自定义函数
定义函数:
def function(arg1,arg2): # def关键字, function 自定义函数名
return
2.参数:参数的传递分为值传递和引用传递
在Python中,strings,tuples,和numbers是不可更改的对象,是值传递,而list,dict则是可以修改的对象,是引用传递;
由于python不是强类型语言,参数没有类型,不做类型检查,不支持重载,不会区分参数名字和个数;多个同名函数时,后一个会覆盖前一个位置参数和关键字参数;
def funA(x,y,z):
print x,y,z
funA(2018,'你好','我叶良辰表示不服')
funA(z="我叶良辰来了", x=2010, y='你们好')
参数分为三种:必备参数、关键字参数、缺省参数:
- 必备参数:必须要有的参数
- 关键字参数:指定参数进行赋值,这样可以不用考虑顺序
- 缺省参数:参数已经有默认值了,这个时候如果不传值就使用默认值
参数中还有不定长参数:*args接收为元组,**kwargs接收为字典
# 不定长参数:
def funC(x, y, z, *args, **kwargs):
print x, y, z
print args
print kwargs
3.return
return是返回
4.作用域:全局变量,局部变量
使用global 在局部变量中声明,那么这个局部变量就变为使用外面的全局变量
lambda:python中的匿名函数
优点是简洁,性能好
c = lambda x:[i for i in x if i%2 == 0 ] # 生成器,就相当于定义了一个函数c
#不使用匿名函数
def cc(x):
list1 = []
for i in x:
if i % 2 == 0:
list1.append(i)
return list1
利用lambda表达式实现了filter(),map(),reduce();
filter()用于过滤序列,过滤掉不符合条件的元素,
5.函数对象与闭包:使用函数里面的变量
#使用fun_a 中的y变量
def fun_a(x):
y = 0
def fun_b():
...
return fun_b
ff = fun_a # ff是fun_a的别名
ff = fun_a()
函数是对象,可以给函数增加属性:
6.装饰器:# 插入日志性能测试,事务处理,缓存,权限校验等拓展功能
装饰器固定写法:
def decorator1(arg):
# 这个是装饰器函数
def wrapper(a, b): # wrapper 英文意思是:包装纸
# 装饰代码块
arg(a,b)
# 装饰代码块
return wrapper
例子:记录某函数执行的总时间
#1.未进行记录时间的函数
def compute_time():
print 'hello'
# 在线程里面停止两秒
time.sleep(2)
print 'world'
未使用装饰器的记录时间方法是在开头和结尾加上记录时间
def compute_time1():
start_time = time.time()
print 'hello'
time.sleep(2)
print 'world'
end_time = time.time()
msecs = end_time - start_time
print '时间差是:%d' %(msecs * 1000)
通过装饰器实现上面的记录时间写法:
def decorator1(arg):
# 这个是装饰器函数
def wrapper(a, b):
# wrapper 英文意思是:包装纸
startTime = time.time()
arg(a,b)
endTime = time.time()
print '时间差是:', (endTime-startTime)*1000
return wrapper
@decorator1
def fun(a, b):
print 'hello ,ddd'
time.sleep(1)
print (a+b)