首页 > 其他 > 详细

当函数返回值为可变数据类型(字典)时,可在返回之前添加一个键值对,赋值可以是当前作用域函数的内存地址,这样就能以字典获取vaule的形式调用到内部函数(赋值的内存地址指向的函数)

时间:2019-08-31 18:06:03      阅读:95      评论:0      收藏:0      [点我收藏+]
#人狗大战,定义了两个函数,一个person,一个dog,函数体内定义的是属性,内部函数定义为‘攻击’,创建对象后调用此函数可以进行改变血量,即受到攻击。
def
person(name,hp,ack,sex): person = { 名字:name, 血量:hp, 攻击力:ack, 性别:sex, } def skill(dog): dog[血量] -= person[攻击力] if dog[血量] > 0: return 狗%s被%s打了,剩余%s血量%(dog[名字],person[名字],dog[血量]) else: return 哦豁,狗%s被你打死了%(dog[名字]) person[skill_1] = skill #调用person后,执行到这里,在person字典中添加到了键值对“skill_1”:skill,skill指向的是skill函数的内存地址 return person #将含有key为skill_1,value为skill的内存地址的字典返回 def dog(name,hp,ack,sex): dog = { 名字:name, 血量:hp, 攻击力:ack, 性别:sex, } def skill(person): person[血量] -= dog[攻击力] return %s被一条叫%s的狗咬了了,剩余%s血量%(person[名字],dog[名字],person[血量]) dog[dog_skill] = skill return dog aike = person(aike,1000,100,) #接收到了返回来的字典,并且字典里含有key为skill_1,value为skill内存地址 chen = dog(chenfan,200,20,huntaway) print(aike) print(chen) print(aike[skill_1](chen))#获取字典key为skill_1的值,执行的是skill函数,并且把对象chen(字典)传了进去,函数内就能够调用到字典chen内的元素 print(aike[skill_1](chen)) print(aike[skill_1](chen)) print(chen[dog_skill](aike))

知识点:闭包,即外部函数的变量被内部函数调用

思考:当函数返回值为可变数据类型(字典)时,可在返回之前添加一个键值对,赋值可以是当前作用域函数的内存地址,这样就能以字典获取vaule的形式调用到内部函数(赋值的内存地址指向的函数)

当函数返回值为可变数据类型(字典)时,可在返回之前添加一个键值对,赋值可以是当前作用域函数的内存地址,这样就能以字典获取vaule的形式调用到内部函数(赋值的内存地址指向的函数)

原文:https://www.cnblogs.com/aizhinong/p/11439821.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!