标题:外层函数的变量能不能直接被嵌套函数引用计算?
只看楼主
troyzyc
Rank: 1
等 级:新手上路
帖 子:108
专家分:0
注 册:2016-7-4
结帖率:56.6%
已结贴  问题点数:4 回复次数:1 
外层函数的变量能不能直接被嵌套函数引用计算?
示例1:fun1()函数中的b不能在fun2()中直接用吗?
class Solution:
    def fun1(self,a,b):
        c = a + b
        b = 0         #fun1()函数中的b不能在fun2()中直接用吗?
        def fun2(c):
            b += 1      #报错:UnboundLocalError: local variable 'b' referenced before assignment
            print('b=',b)
            print('c=',c)
            return
        
        fun2(c)
        print(b)
        return 0
   
result = Solution()
result.fun1(1,2)

示例2:但是下边程序中Permutation(self, ss)中的lens变量却能直接在dfs函数中使用,这是为什么?
class Solution:   
    def Permutation(self, ss):  
        lens = len(ss)    #该变量具有全局性,在dfs中可以直接用。
        box = [0] * lens  
        book =[0] * lens  
        steps = 0     
        ans = []           
        if len(ss) == 0:  
            return []
        def dfs(steps):
            if steps > lens-1:    #重点:Permutation的变量lens可以直接在dfs中应用
                str1 = ''        
                for j in range(lens):  
                    #print("{0}".format(box[j]),end='')
                #print('\n')
                    str1 = str1 + box[j]   
                ans.append(str1)
               
                return
            
            for i in range(lens):      
                if book[i] == 0 :   
                    box[steps] = ss[i]
                    book[i] = 1      

                    dfs(steps + 1)   #递归
                    book[i] = 0  
            return
            
        dfs(steps)  #函数中若要调用嵌套函数,需要引用这个函数
        
        #在dfs及自身的递归结束后,输出列表ans
        #特殊情况2:ss=['a','a'],有重复的字母时,要用去重
        ans = list(set(ans))   #去重:set去重后返回的是set类型,要改为list类型
        ans = sorted(ans)      #再对ans结果排序,从小到大
        print(ans)
        return ans
        
        
ss = ['a','b','c']
result = Solution()
result.Permutation(ss)  
搜索更多相关主题的帖子: 函数 变量 嵌套 print return 
2018-09-01 19:08
kfyniriu
Rank: 6Rank: 6
等 级:侠之大者
威 望:9
帖 子:105
专家分:426
注 册:2018-7-6
得分:4 
两个函数分别加上 global b
2018-09-05 17:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489574-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.320606 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved