Python 包裝函式中變數的使用

2021-09-02 00:00:58 字數 1249 閱讀 6236

最近python學習到了包裝函式,說真的,這部分內容一開始真的有點難理解。

遇到一道很簡單的練習題:(附上**)

利用閉包返回乙個計數器函式,每次呼叫它返回遞增整數

def createcounter():

ans = [0]

def counter():

ans[0] += 1

return ans[0]

return counter

一開始,我是這樣寫的:

def createcounter():

n = 0

def counter():

n = n + 1

return n

return counter

結果報錯了,琢磨了好久,發現原來內層函式只可以呼叫外層函式中定義的變數,但不能對其進行更改(內層函式對於外層函式中的變數只有讀許可權,沒有寫許可權)。如果想要更改,系統會認為要更改的是內層函式中乙個相同名字的變數(內層函式中可以使用乙個與外層函式中名字完全相同的變數),所以在counter內創立乙個新的變數n,而這個變數n沒有初始化,因此報錯了。

看了別人的分析之後,收集了三種解決方法:

1.將x定義為global,全域性命名空間在任何乙個位置都有讀寫許可權,但問題是在任何地方都可以對其修改。

def createcounter():

global x

x=0def counter():

global x

x += 1

return x

return counte

2.將外層函式中的x定義為list。在內層使用x[0]+=1時,list的指向不會發生變化,變化的是list內部的元素。

def createcounter():

x = [0]

def counter():

x[0] += 1

return x[0]

return counter

3.設定乙個指向可變物件list的預設引數。思路與2一樣,只要引數一直等於預設引數,就會始終指向同乙個list的位址,變化的是list內部的元素。

def createcounter():

def counter(x=[0]):

x[0] = x[0]+1

return x[0]

return counter

Python函式中的變數和函式返回值的使用例項

區域性變數和全域性變數 python中的任何變數都有特定的作用域 在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用的變數我們稱之為區域性變數 在乙個檔案頂部定義的變數可以供檔案中的任何函式呼叫,這些可以為整個程式所使用的變數稱為全域性變數。def fun x 100 prin...

python中的enumerate 函式使用方法

結合例項來理解比較好,網上找了一下這個enumerate用法,自己也記錄一下加深印象 舉例說明 具體例子 列印輸出索引與value值 列表1 print 列表1 product mac pro iphone iwatch for index,item in enumerate product pri...

關於python中argsort 函式的使用

在實現 機器學習實戰 中knn 時遇到需要將計算好的距離進行排序,即可使用argsort 函式,在此依據個人理解對該函式進行簡單的介紹。總的來說,argsort 函式是對陣列中的元素進行從小到大排序,並返回相應序列元素的陣列下標。以下通過例子進行詳細解釋。from numpy import a ar...