組み込み関数とクロージャ小亀の話21は、要約を反映します

教室の概要:
ここでは2つの例を示します。

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

fun1()

これは、グローバル変数は、x = 5であり、そしてxはローカル変数FUN1あるため、内層と外層との間の関係に対応し、内側層は外側層のデータを得ることができない、与えられています。この時点で、外部変数を参照するには、グローバル、グローバル変数の参照を追加する必要があります。次のとおりです。

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

fun1()

第二の例は、閉鎖層の内部空間に相当するが、インナーケースはかなりあり、与えられた内部機能(注ないクロージャ!関数の外部クロージャの戻り値、以下の例を参照)の添加であります内側の層のグローバル変数の。同じ缶は、そのデータを参照しません

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

この時間を変更するには2つの方法がありますが、最初の1は、xリストに等しいです。リストには、もはや何の世界全体の問題は存在しないしないようにそれらをスタックしません

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

または非ローカル、注意を払うへの参照!そしてgobalでgobal違いが本当のグローバル変数に適用されます


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

アフタースクールのタイトル

5.どのように行う)(funInにアクセスするのでしょうか?

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

アンチバック機能以来ではなく、価値、それは2つのブラケットを追加し、ここでは第二の機能と値を返さないので、ダイレクトプリントを印刷していない必要がありますので、

##关于是否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.以下は、「閉鎖」の一例であり、どのような次の視覚的な印刷あなたを参照してください?

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

分析:まず、外を見るために返す関数なので、A = funx()= funY。次いでfunY()= X戻り値。Xは、それぞれ呼び出して、データが削除されない、1が追加され、X、および外側のx = 5が変更され、外部空間に対してグローバル変数として定義されています。すべての印刷xの値が変更される時、プラスワンはそう、とそう6.7.8があります

公開された17元の記事 ウォンの賞賛1 ビュー353

おすすめ

転載: blog.csdn.net/cccccccaaaaaaaaa/article/details/105317293