函数调用函数-》加强函数-》面向切面
In [ ]
#函数名是可以赋值给变量的
def say():
print('我们唠10块钱的')
isayhello = say
isayhello()
我们唠10块钱的
In [ ]
#函数中可以定义函数
def say():
def sayHello():
print('你好啊')
def sayBye():
print('再见')
sayHello()
print('我们唠10块钱的')
sayBye()
say()
你好啊
我们唠10块钱的
再见
In [ ]
#函数是可以作为参数传递的
def say(conv):
def sayHello():
print('你好啊')
def sayBye():
print('再见')
sayHello()
conv()
sayBye()
def conv1():
print('唠5块钱的')
def conv2():
print('唠1个点呗')
say(conv1)
say(conv2)
你好啊
唠5块钱的
再见
你好啊
唠1个点呗
再见
In [ ]
#函数是可以作为函数的返回值
def say(flag):
def sayHello():
print('你好啊')
def sayBye():
print('再见')
if flag == 1:
return sayHello
return sayBye
res1 = say(1)
res1()
你好啊
In [ ]
#clean的写法
def say(conv):
def sayHello():
print('你好啊')
def sayBye():
print('再见')
sayHello()
conv()
sayBye()
@say
def conv1():
print('唠5块钱的')
@say
def conv2():
print('唠1个点呗')
@say
def conv3():
print('唠啥啊,喝吧')
你好啊
唠5块钱的
再见
你好啊
唠1个点呗
再见
你好啊
唠啥啊,喝吧
再见
实际使用日志
In [ ]
#没用装饰器的时候
def add(a,b):
print('add is call')
print('a---%s b----%s'%(a,b))
print(a+b)
def mins(a,b):
print('mins is call')
print('a---%s b----%s'%(a,b))
print(a-b)
def mul(a,b):
print('mul is call')
print('a---%s b----%s'%(a,b))
print(a*b)
def div(a,b):
print('div is call')
print('a---%s b----%s'%(a,b))
print(a/b)
add(1,2)
mins(1,2)
mul(1,2)
div(1,2)
add is call
a---1 b----2
3
mins is call
a---1 b----2
-1
mul is call
a---1 b----2
2
div is call
a---1 b----2
0.5
In [ ]
from functools import wraps
#使用了装饰器
def mylog(func):
@wraps(func)
def with_logging(*args):
print(func.__name__+" was called")
print(args)
return func(*args)
return with_logging
@mylog
def add(a,b):
print(a+b)
@mylog
def mins(a,b):
print(a-b)
@mylog
def mul(a,b):
print(a*b)
@mylog
def div(a,b):
print(a/b)
add(1,2)
mins(1,2)
mul(1,2)
div(1,2)
add was called
(1, 2)
3
mins was called
(1, 2)
-1
mul was called
(1, 2)
2
div was called
(1, 2)
0.5