下面是源代码defcycle(f1,f2,f3):"""返回一个本身就是高阶函数的函数。>>>defadd1(x):...returnx+1>>>deftimes2(x):...返回x*2>>>defadd3(x):...返回x+3>>>my_cycle=cycle(add1,times2,add3)>>>identity=my_cycle(0)>>>身份(5)5>>>add_one_then_double=my_cycle(2)>>>add_one_then_double(1)4>>>do_all_functions=my_cycle(3)>>>do_all_functions(2)9>>>do_more_than_a_cycle=my_cycle(4)>>>do_more_than_a_cycle(2)10>>>do_two_cycles=my_cycle(6)>>>do_two_cycles(1)19""""***你的代码在这里***"defh1(n):defh2(x):whilen>3:x=f3(f2(f1(x)))n-=3如果n==0:x=xelifn==1:x=f1(x)elifn==2:x=f2(f1(x))elifn==3:x=f3(f2(f1(x)))returnxreturnh2returnh1写成这样>>>defadd1(x):...returnx+1>>>deftimes2(x):...returnx*2>>>defadd3(x):...returnx+3>>>my_cycle=cycle(add1,times2,add3)>>>identity=my_cycle(0)>>>identity(5)然后会报UnboundLocalError:localvariable'n'referencedbeforeassignment但是如果改成defcycle(f1,f2,f3):"""返回一个本身就是高阶函数的函数。>>>defadd1(x):...returnx+1>>>deftimes2(x):...返回x*2>>>defadd3(x):...returnx+3>>>my_cycle=cycle(add1,times2,add3)>>>identity=my_cycle(0)>>>identity(5)5>>>add_one_then_double=my_cycle(2)>>>add_one_then_double(1)4>>>do_all_functions=my_cycle(3)>>>do_all_functions(2)9>>>do_more_than_a_cycle=my_cycle(4)>>>do_more_than_a_cycle(2)10>>>do_two_cycles=my_cycle(6)>>>>do_two_cycles(1)19""""***你的代码在这里***"defh1(num):defh2(x):n=numwhilen>3:x=f3(f2(f1(x)))n-=3如果n==0:x=xelifn==1:x=f1(x)elifn==2:x=f2(f1(x))elifn==3:x=f3(f2(f1(x)))returnxreturnh2returnh1没有问题,也就是说外部函数中定义的num可以获取,但是不能直接使用,最奇怪的是,看答案写defret_fn(n):defret(x):i=0whilei
