如何在finaloutput()中调用另一个函数的子函数percent()?
当然有办法实现啦!问题出在Python的嵌套函数作用域上——默认情况下,percent()作为findpercents()的内部函数,外部是无法直接访问的。不过我们可以通过几种方式把它“暴露”出来,让finaloutput()能调用到它。
方法1:让
findpercents()返回内部的percent函数 这是最直接的方式,我们修改findpercents(),让它在执行完原有逻辑后返回内部定义的percent函数对象,这样外部就能拿到并调用它。
修改后的完整代码示例:
count1=0 count2=0 p=0 p2=0 p1=0 def findpercents(): print("_______________find percents__________________") global count1,count2,p,p1,p2 def percent(): p=((count1+count2)/10)*100 print("totalcb%=",p) p1=(count1/10)*100 print("malecb%=",p1) p2=(count2/10)*100 print("femalecb%=",p2) percent() # 保留原有的调用逻辑 return percent # 返回内部函数对象 def finaloutput(): print("______Final Output______") # 先从findpercents()获取percent函数 percent_func = findpercents() # 在finaloutput里调用它 percent_func() # 测试调用 finaloutput()
简单解释:当你调用findpercents()时,它会先执行自身的逻辑(包括原本的percent()调用),然后把percent函数本身返回给你。你把这个函数存到变量里,就能在finaloutput()里自由调用了。
方法2:将
percent()设为findpercents()的属性 如果你不想每次调用都返回函数,也可以把percent()绑定为findpercents这个函数的属性。不过要注意:内部函数的定义只有在findpercents()被执行过一次后才会存在,所以得先执行一次findpercents()来初始化这个属性。
示例代码:
count1=0 count2=0 p=0 p2=0 p1=0 def findpercents(): print("_______________find percents__________________") global count1,count2,p,p1,p2 def percent(): p=((count1+count2)/10)*100 print("totalcb%=",p) p1=(count1/10)*100 print("malecb%=",p1) p2=(count2/10)*100 print("femalecb%=",p2) findpercents.percent = percent # 把内部函数绑定为外部函数的属性 percent() # 先执行一次findpercents,让percent属性被创建 findpercents() def finaloutput(): print("______Final Output______") # 直接通过函数属性调用percent() findpercents.percent() # 测试 finaloutput()
额外小建议
你现在用了不少全局变量,其实可以考虑把这些状态封装到类里,或者作为函数的参数/返回值传递,这样代码会更整洁,也能避免全局变量被意外修改的问题。比如可以把count1、count2作为参数传给percent(),或者用类来管理这些统计数据。
内容的提问来源于stack exchange,提问作者Shubham kumar
相关产品推荐
相关产品推荐

