首页 新闻 会员 周边 捐助

python中返回函数的相关问题。

0
悬赏园豆:10 [已解决问题] 解决于 2016-09-01 15:50
#今天阅读廖雪峰大神的python教程,看到返回函数这一部分。他说到:内部函数可以引用外部函数的参数和局部变量。
def col(*arg):
    res_sum=0         #既然内部函数可以引用外部函数的变量,为什么res_sum没有被内部函数所引用              #?
    def sum():
        for i in arg:
            res_sum=res_sum+i
        return res_sum
    return sum
a=col(1,2,3,4,5)
print(a())

#但是这个代码就出错了,原因是:local variable 'res_sum' referenced before assignment
#当我修改代码
def col(*arg):

    def sum():
        res_sum=0       #将这句移动到这里就可以了
        for i in arg:
            res_sum=res_sum+i
        return res_sum
    return sum
a=col(1,2,3,4,5)
print(a())
MnCu的主页 MnCu | 初学一级 | 园豆:158
提问于:2016-05-06 13:11
< >
分享
最佳答案
1

你这里的矛盾在于,你在内部函数里面,又对res_sum进行了赋值,这个时候解释器以为res_sum是局部变量了,不再是全局变量了。 如果不再赋值给res_sum,那解释器就会把res_sum认定为全局变量。 如果要再赋值给res_sum,需要加上global注明,告诉解释器,这里赋值的res_sum不是局部的。

收获园豆:10
Fedel | 菜鸟二级 |园豆:232 | 2016-05-09 10:25
其他回答(2)
0

可以引用外部,但是不能直接引用其它函数内的变量。因为函数内变量默认是局部变量。

可以试试加上global 

墨镜带佬星 | 园豆:2310 (老鸟四级) | 2016-05-06 13:24
0

这里我明白了:

  其实并不是闭包的问题,比如说这个函数:

def fun1():
    a=2
    def fun2():
        print(a)
    return fun2()
fun1()

运行后完全能显示a的值。

但为什么我问题中就不可以呢?

这是因为:在内部函数中res_sum=res_sum+i  这句就是将外部函数的变量进行修改,这是不被允许的!!如果我们这样修改,那将完全没有问题:

def col(*arg):
    res_sum=0         
    def sum():
        for i in arg:
            a=res_sum+i   #自定义一个变量a
        return a
    return sum
a=col(1,2,3,4,5)
print(a())

 

MnCu | 园豆:158 (初学一级) | 2016-05-07 21:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册