ITPub博客

首页 > 应用开发 > Python > 外层函数的变量直接被嵌套函数引用计算

外层函数的变量直接被嵌套函数引用计算

原创 Python 作者:代码女民工 时间:2021-11-03 18:52:22 0 删除 编辑

fun1()函数中的b在fun2()中直接用
class Solution:  

 def fun1(self,a,b):
        c = a + b
        b = 0         
        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)  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70007056/viewspace-2840484/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2021-09-17

  • 博文量
    38
  • 访问量
    10379