Python의 어휘 클로저: 예기치 않은 동작 이해
Python에서 어휘 클로저를 사용하면 내부 함수가 바깥쪽 범위에 정의된 변수에 액세스할 수 있습니다. 그러나 공유 변수를 수정하는 루프 내에서 함수를 정의할 때 예기치 않은 동작이 발생합니다. 이를 설명하기 위해 다음 Python 코드를 고려하십시오.
flist = [] for i in range(3): def func(x): return x * i flist.append(func) for f in flist: print(f(2))
이 코드는 "4 4 4"를 인쇄합니다. 이는 "0 2 4"를 예상할 수 있는 놀라운 결과입니다. 이러한 예상치 못한 동작의 원인은 폐쇄 메커니즘에 있습니다. Python에서 루프 내에 정의된 함수는 새 함수를 생성하지만 둘러싸는 범위(이 경우 전역 범위)를 공유합니다. 결과적으로 i 값이 이후에 수정되면 목록 내의 모든 함수는 동일한 수정된 i 값을 참조합니다.
이 문제를 해결하려면 루프 내의 각 함수에 대해 고유한 환경을 만들어야 합니다. . 이는 함수 생성기를 사용하여 수행할 수 있습니다.
flist = [] for i in range(3): def funcC(j): def func(x): return x * j return func flist.append(funcC(i)) for f in flist: print(f(2))
이 수정된 코드에서 funcC를 호출할 때마다 자체 값 i를 사용하여 새로운 클로저 환경이 생성됩니다. 결과적으로 목록의 각 함수는 고유한 i 값에 액세스하여 "0 2 4"라는 예상 출력을 얻습니다.
이 동작은 특히 다음과 같은 경우 Python에서 클로저가 작동하는 방식을 이해하는 것이 중요함을 강조합니다. 부작용과 함수형 프로그래밍을 다룬다. 루프 내에 정의된 함수가 수정된 변수를 공유하면 예기치 않은 동작이 발생할 수 있습니다. 기능 생성자를 활용하면 각 기능에 대한 고유한 환경을 만들고 원하는 동작을 달성하는 데 도움이 됩니다.
위 내용은 루프의 Python 어휘 클로저가 예기치 않은 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Pythonusesahybridmodelofilationandlostretation : 1) ThePyThoninterPretreCeterCompileSsourcodeIntOplatform-IndependentBecode.

Pythonisbothingretedandcompiled.1) 1) it 'scompiledtobytecodeforportabilityacrossplatforms.2) thebytecodeisthentenningreted, withfordiNamictyTeNgreted, WhithItmayBowerShiledlanguges.

forloopsareusedwhendumberofitessiskNowninadvance, whilewhiloopsareusedwhentheationsdepernationsorarrays.2) whiloopsureatableforscenarioScontiLaspecOndCond

pythonisnotpurelynlogreted; itusesahybrideprophorfbyodecodecompilationandruntime -INGRETATION.1) pythoncompilessourcecodeintobytecode, thepythonVirtualMachine (pvm)

ToconcatenatelistsinpythonwithesameElements, 사용 : 1) OperatorTokeEpduplicates, 2) asettoremovedUplicates, or3) listComperensionForControlOverDuplicates, 각 methodHasDifferentPerferformanCeanDorderImpestications.

PythonisancerpretedLanguage, 비판적 요소를 제시하는 PytherfaceLockelimitationsIncriticalApplications.1) 해석 된 언어와 같은 thePeedBackandbackandrapidProtoTyping.2) CompilledlanguagesLikec/C transformt 해석

useforloopswhhenmerfiterationsiskNownInAdvance 및 WhileLoopSweHeniTesslationsDepoyConditionismet whilEroopsSuitsCenarioswhereTheLoopScenarioswhereTheLoopScenarioswhereTheLoopScenarioswhereTherInatismet, 유용한 광고 인 푸트 gorit


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

드림위버 CS6
시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는