在循環中建立函數:解決後期綁定問題
嘗試在循環中定義單一函數時,通常會遇到以下問題:儘管旨在表示唯一的結果,但所有函數都會傳回相同的值。這種現象稱為後期綁定,發生的原因是函數在被呼叫之前不會接收其參數。
考慮以下使用 for 迴圈的範例:
functions = [] for i in range(3): def f(): return i functions.append(f)
如所寫,每個函數在呼叫時找出 i 的對應值。然而,循環執行後,所有函數都會引用i (2) 的最終值,從而產生以下輸出:
print([f() for f in functions]) # Expected: [0, 1, 2] # Actual: [2, 2, 2]
解決方案:強制早期綁定
為了解決這個問題,有必要透過在定義時而不是呼叫時將參數分配給函數來強制早期綁定。這可以透過在函數定義中新增預設參數來實現:
functions = [] for i in range(3): def f(i=i): return i functions.append(f)
預設參數(在本例中為 i=i)在定義函數時計算,而不是在呼叫函數時計算。這確保每個函數保留其唯一的參數值,產生所需的輸出:
print([f() for f in functions]) # Output: [0, 1, 2]
使用閉包的替代方法
如果擔心可能存在其他參數要傳遞給函數,可以使用閉包實現更複雜的方法:
def make_f(i): def f(): return i return f
在這種情況下,建立函數工廠(make_f)。在迴圈內,make_f 傳回的函數被指派給 f 變量,而不是直接呼叫 def f():。這種方法保證每個函數保留其獨佔的參數值,就像早期的綁定解決方案一樣。
以上是為什麼循環中定義的函數經常會傳回相同的值,如何解決這個問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

SlicingaPythonlistisdoneusingthesyntaxlist[start:stop:step].Here'showitworks:1)Startistheindexofthefirstelementtoinclude.2)Stopistheindexofthefirstelementtoexclude.3)Stepistheincrementbetweenelements.It'susefulforextractingportionsoflistsandcanuseneg

numpyallowsforvariousoperationsonArrays:1)basicarithmeticlikeaddition,減法,乘法和division; 2)evationAperationssuchasmatrixmultiplication; 3)element-wiseOperations wiseOperationswithOutexpliitloops; 4)

Arresinpython,尤其是Throughnumpyandpandas,weessentialFordataAnalysis,offeringSpeedAndeffied.1)NumpyArseNable efflaysenable efficefliceHandlingAtaSetSetSetSetSetSetSetSetSetSetSetsetSetSetSetSetsopplexoperationslikemovingaverages.2)

列表sandnumpyArraysInpythonHavedIfferentMemoryfootprints:listSaremoreFlexibleButlessMemory-效率,而alenumpyArraySareSareOptimizedFornumericalData.1)listsStorReereReereReereReereFerenceStoObjects,with withOverHeadeBheadaroundAroundaround64byty64-bitsysysysysysysysysyssyssyssyssysssyssys2)

toensurepythonscriptsbehavecorrectlyacrycrosdevelvermations,分期和生產,USETHESTERTATE:1)Environment varriablesForsimplesettings,2)configurationfilesfilesForcomPlexSetups,3)dynamiCofforComplexSetups,dynamiqualloadingForaptaptibality.eachmethodoffersuniquebeneiquebeneqeniquebenefitsandrefitsandrequiresandrequiresandrequiresca

Python列表切片的基本語法是list[start:stop:step]。 1.start是包含的第一個元素索引,2.stop是排除的第一個元素索引,3.step決定元素之間的步長。切片不僅用於提取數據,還可以修改和反轉列表。

ListSoutPerformarRaysin:1)DynamicsizicsizingandFrequentInsertions/刪除,2)儲存的二聚體和3)MemoryFeliceFiceForceforseforsparsedata,butmayhaveslightperformancecostsinclentoperations。

toConvertapythonarraytoalist,usEthelist()constructororageneratorexpression.1)intimpthearraymoduleandcreateanArray.2)USELIST(ARR)或[XFORXINARR] to ConconverTittoalist,請考慮performorefformanceandmemoryfformanceandmemoryfformienceforlargedAtasetset。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。