zoukankan      html  css  js  c++  java
  • Python2闭包问题

    Python2 中的闭包比较怪异,和javascript中的闭包不大一样,这里说明一下。

    不少内容引自http://www.cnblogs.com/vamei/archive/2012/12/15/2772451.html这篇文章,加以说明。

    def line_conf():
    

        b = 15
    

    
    					def line(x):
    

    
    					return 2*x+b
    

    
    					return line       # return a function object
    								

     

    b = 5
    my_line = line_conf()

    print(my_line(5))   
    				

     

    这段代码可以正常运行,结果为25

    但是下面这个就不行

    def line_conf():
    b = 15
    def line(x):
    if(b>10):
    b=50;
    return 2 * x + b
    return line # return a function object
    my_line = line_conf()
    print(my_line(5))

    就会提示如下错误:

    UnboundLocalError: local variable 'b' referenced before assignment

    这是因为在line函数中对b进行了赋值,python就认为这个是一个局部变量(如果想修改全局变量,就必须进行global声明)。

    如果还想这个方法可以使用,就必须将b声明为全局变量。如下:

    b=10
    def line_conf():
    global b;
    b = 15
    def line(x):
    global b;
    if(b>10):
    b=50;
    return 2 * x + b
    return line # return a function object
    my_line = line_conf()
    print(my_line(5))

     

    当然如果你不想进行全局变量声明,就把b放进list中,方式很多,但是就是不能直接出现对外部函数局部变量直接赋值的语句。

  • 相关阅读:
    strstr 函数的实现
    函数模板与模板函数
    内核态和用户态
    最短路径算法(跟新SPFA,Ford)
    P1042 乒乓球
    P2347 砝码称重
    P1087 FBI树
    P1540 机器翻译
    P1028 数的计算
    P1067 多项式输出
  • 原文地址:https://www.cnblogs.com/baizx/p/4303360.html
Copyright © 2011-2022 走看看