从Python中返回的函数中获取属性

时间:2016-09-11 17:24:06

标签: python closures

def outerFunc(number):
    if number < 0:
        def innerFunc(factor):
            return number * factor
    else:
        def innerFunc(summand):
            return number + summand
    return innerFunc

x = outerFunc(-8)
print(x(4))

正如预期的那样,print语句的结果为-32。我正在使用Python 3.5.2

我想问一下有关此代码段的两个问题:

  1. 在使用语句number绑定innerFuncx后,是否可以访问内部函数的x = outerFunc(-8)属性?换句话说:在执行闭包之后,是否可以直接访问number的保留值,在本例中为-8
  2. 根据if语句的评估,返回函数是不是很好的编程风格?就个人而言,我认为有更好的方法,但我不确定。
  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

  

是否可以访问内部函数的number属性

这不是财产。您可以在技术上访问它,但不能以一种特别好的方式访问它:

number = x.__closure__[0].cell_contents
  

返回函数是不是很好的编程风格,具体取决于对if语句的评估?

是的,没关系。

答案 1 :(得分:-1)

  1. 没有
  2. 很少,但有些情况可能有意义。如果你不得不问这个问题,你应该考虑答案是“不”,“#39;至少现在。