君君城里面的铁匠小詹詹技术非凡,很多人找他去打造剑。一天小猎狗去找小詹詹打造一把剑。
小詹詹问:“小猎狗,有什么具体的要求么?”
小猎狗:“Fuck the 要求,给我打造一把顺手的剑就好了。”
小詹詹说:“好的,我现在就去弄。”
在这里小猎狗给了小詹詹1个参数:顺手。没有别的要求,所以把小詹詹的锻造比作函数的话,小猎狗就是调用了一个带有1个参数的函数。
结果就是小詹詹给了猎狗一把顺手的剑
但是有一天,阿雅去找小詹詹打造匕首:“小詹詹,做个匕首,不然晚上不给你营养快线。”
小詹詹说:“好的,阿雅,有什么具体要求么?”
阿雅顺手给了他一把图鉴,图鉴里面的锻造方法小詹詹从未见过。
小詹詹咽了口气,说“好的!”
在这里阿雅给你图鉴就是一个回调函数,这个回调函数小詹詹提前不知道,利用图鉴和小詹詹的技术才能共同把这个锻造任务完成。
小詹詹完成了这个匕首之后,阿雅用它刺杀了夜王。
下面用代码说明这个过程
class BlackSmith(object):
def __init__(self, name):
self.name = name
def produce_default(self, para):
result = ''
if 'nice' in para:
result += 'nice'
if '顺手' in para:
result += '顺手'
return result + '剑'
def make_weapon(self, para, method=None):
if method:
return method(para)
else:
return self.produce_default(para)
def produce_specific_weapon(para):
return para+'一把可以刺杀夜王的匕首'
class People(object):
def __init__(self, name, method):
self.name = name
self.method = method
self.weapon = ''
if __name__ == "__main__":
# 定义一个铁匠
gendry = BlackSmith('Gendry')
# 小猎狗去找铁匠打造一把普通的剑
hound = People('Hound', None)
hound.weapon = gendry.make_weapon('顺手')
print('小猎狗的武器是', hound.weapon)
# 阿雅去找铁匠打造一把特别的武器
aya = People('Aya', produce_specific_weapon)
aya.weapon = gendry.make_weapon('阿雅专用', aya.method)
print('阿雅的武器是', aya.weapon)
代码的输出结果为:
小猎狗的武器是 顺手剑
阿雅的武器是 阿雅专用一把可以刺杀夜王的匕首
网友评论