Kleine Schildkröte Talk 21 integrierten Funktionen und Schließungen Zusammenfassung widerspiegeln

Klassenzimmer Zusammenfassung:
Hier sind zwei Beispiele:

x=5 
def fun1():
    x*=x
    return x

fun1()

Dies wird gegeben, da die globale Variable ist x = 5 und x ist eine lokale Variable fun1, entsprechend die Beziehung zwischen dem inneren und äußeren Schichten, die innere Schicht kann die Daten nicht von der äußeren Schicht erhalten. An dieser Stelle möchte eine externe Variable verweisen, müssen Sie global, globale Variablenreferenzen hinzuzufügen. Wie folgt:

x=5 
def fun1():
    global x
    x *=x
    print(x)

fun1()

Das zweite Beispiel ist die Zugabe einer internen Funktion (Anmerkung nicht Schließungen! Externer Schließung Rückgabewert einer Funktion, siehe Beispiel unten), das entspricht den Innenraum der Verschlussschicht aufgebracht, das innere Gehäuse ist recht Innenschicht ‚globale Variablen‘. Das gleiche kann nicht auf seine Daten beziehen

def fun1():
    x= 5
    def fun2():
        x *=x
        return x
    return fun2()
print(fun1())

Es gibt zwei Möglichkeiten, diese Zeit zu ändern, ist die erste, die x-Listen gleich. Die Liste wird sie nicht mehr stapeln, so dass kein Gesamt globales Problem existiert nicht

def fun1():
    x= [5]
    def fun2():
        x[0] *=x[0]
        return x[0]
    return fun2()
print(fun1())

Oder Verweis auf nicht-lokale, achten! Und gobal Unterschied in der gobal angewendet realen globalen Variablen


def fun1():
    x= 5
    def fun2():
        nonlocal x
        x *=x
        return x
    return fun2()
print(fun1())

After-School-Titel

5. Wie wird funIn zugreifen () tun?

def funOut():  
	def funIn():  
	    print('宾果!你成功访问到我啦')  
	return funIn 
	#注意,这里return是返回的funOut,而不是funIn 

Da die anti-Back-Funktion eher als Wert, so sollte es zwei Klammern hinzuzufügen, und die zweite Funktion hier und keinen Wert zurückgeben, also nicht drucken Direct Print

##关于是否print的情况顺便作对比:
def fun1():
    x= 5
    def fun2():
        nonlocal x
        x *=x
        return x
    return fun2
print(fun1()())


def funOut():  
	def funIn():  
	    print('宾果!你成功访问到我啦')  
	return funIn
funIn()()

从上面两个对比可已看出,首先,当最后的外包函数返回为一个函数,那么说明内函数为一闭包,此时要调用就必须要加俩括号。
而第一个闭包返回了一个值x,所以最后需要将其打印出来。
第二个闭包print了一个值,返回值为none,此时就只需要调用外包函数即可。
实际上就是内保函数是返回值还是打印值得问题

6. Im Folgenden ein Beispiel für „closure“ ist, bis zum nächsten visuellen Druck, was? .

def funX():  
	x = 5  
	def funY():  
	    nonlocal x  
	    x += 1  
	    return x  
	return funY  
	  
a = funX()  	
print(a())  
print(a())  
print(a())  


答案:6
7
8

Analyse: Zunächst wird eine Funktion zurück, um die Außenseite, so a = FunX () = FUNY zu sehen. Dann FUNY () = x Rückgabewert. x hat als globale Variable in Bezug auf den Außenraum, so jeden Anruf definiert worden ist, X 1 hinzugefügt wird, werden die Daten nicht gelöscht, und die äußere x = 5 ändert. Also jede Druckzeit wird x-Wert plus eins ändern, und so ist 6.7.8

Veröffentlicht 17 Originalarbeiten · erntete Lob 1 · Ansichten 353

Ich denke du magst

Origin blog.csdn.net/cccccccaaaaaaaaa/article/details/105317293
Empfohlen
Rangfolge