1.嵌套函数下层函数修改上层函数变量值
问题:在嵌套函数,即def fun1():def fun2()类型的函数中,如果函数fun2想要修改fun1中的变量,就不能用global来声明变量了,因为它不是全局变量,只是上层函数中的变量。
解法:用nonlocal声明变量,比如力扣_八皇后问题II的解法,如下
class Solution:
def totalNQueens(self, n: int) -> int:
colomn = set()
zuoxie = set()
youxie = set()
ans = 0
def iterate(raw):
if raw == n:
nonlocal ans
ans += 1
for i in range(n):
if i in colomn or (i+raw) in youxie or (i - raw) in zuoxie:
continue
colomn.add(i)
zuoxie.add(i - raw)
youxie.add(i+raw)
iterate(raw+1)
colomn.remove(i)
zuoxie.remove(i - raw)
youxie.remove(i+raw)
return ans
return iterate(0)
怎样让ans随内层函数递归叠加出最终答案是重点,有三种方法:1.类外定义global ans,不行。2.定义类属性ans,类方法内部调用self.ans+=1,通过;3.用nonlocal ans改变上层函数的变量,也通过。
但如果是多层嵌套函数,每一层都有一个ans,最底层函数funn它会改变哪一层的ans呢?
不用试了,只改变其上一层,其他不变,焯!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)