nested
-중첩, 일반적으로 2중 loop등을 지칭할 때 사용되는 용어.
-function 내부에서 function을 정의하는 것.
-lambda와 비슷하나(함수 내부에서 정의 가능함), lambda보다 복잡한 구현이 필요할 때 사용한다.
lambda
-anonymous(익명함수-이름이 없음)를 만드는데 사용됨.
:함수는 만들어야 하지만 def문으로 정의해서 사용하기에는 너무 간단한 경우 사용한다. 일반 함수와 달리 이름이 없음.
하나의 expression 사용(한 줄로 표현 가능)
return문을 따로 만들어 주지 않음.
IIFE(Immediately Invokded Function Expression)-reference를 사용하지 않고 일회성으로 사용, 다시 사용 불가, 해당 line에서만 사용할 간단한 처리를 구현하는 경우 사용되는 방식.
구문
lambda parameters: expression
ex)
map-iterator 반환
:list로 바꾸어주는 처리(list(reference이름))을 해야 제대로 item들을 출력해줌.
:각 요소에 동일한 연산을 적용하고자 할 때 수행함.(ex. list의 모든 값을 제곱하여 출력)
구문
map(function, iterable)
iterable-반복가능한 객체. ex)list, tuple, dictionary 등.
ex)
namespace
:variables와 object의 이름을 매핑하는데 사용. 변수와 함수, 클래스 등이 정의되고 사용될 수 있는 범위를 지칭. 같은 이름으로 발생하는 name collision을 방지함. 동일한 name(identifier)이라도 namespace가 다르면 충돌없이 사용가능.
:global, function, class, instance, method, module등이 있다.
ex)
SCOPE(범위)
- lexical scope(static scope)
:variable이나 function등이 source code내에서 선언(혹은 정의)된 위치에 따라 scope(or namespace)가 결정되는 방식. - dynamic scope
:call(호출) 및 실행 등에 따라 scope이 만들어지며, perl과 bash등에서 사용됨.
- global: 바탕-최상위 레벨에서 정의된 변수들의 범위. 이 변수들은 어느 곳에서든 접근할 수 있다. 함수 내부에서 사용할 시 variable shadowing이 일어나지 않게 'global'이라는 키워드 사용. 많이 사용되지 않도록 권함.
- local: 함수 내부에서 선언된 변수들의 범위
- nonlocal: 중첩된 함수에서 사용됨. closure등에서 사용됨. 내부 함수에서 외부 함수의 변수에 접근해야할 때 사용.
*variable shadowing: global scope과 local scope에서 변수명이 겹치는 것.
ex)
closure
-nested function으로, 자신의 enclosing scope(=python에서 nonlocal scope)의 상태값을 기억하고 유지, 변경, 사용할 수 있는 경우.
-외부 범위의 변수를 기억한다.
-lexical scope(static scope)을 기반으로 변수를 가져오기 때문에 함수가 정의된 후에도 함수 내부에서 사용되는 변수의 값을 변경하거나 참조할 수 있다.
- closure가 되는 조건
- nested function
- 해당 nested function내에서 nonlocal scope의 변수를 참조하여 사용.
- 해당 nested function에 대한 reference가 반환되어 이 후로 사용 가능해야 함.
-전역변수의 기능을 활용하면서도 아무나의 접근을 제한하면서, 각 closure 별로 고유의 상태를 유지할 수 있다.
closure를 한마디로 정리하자면, 외부 변수를 기억하고 함수 내에서 사용할 수 있게 하는 method.
stack frame(function context): function의 call과 return을 추적하는데 사용됨.
context: 보통 실행 context를 의미함. 코드 실행중에 변수, 함수 클래스 등을 평가 및 실행하는데 필요한 정보를 유지하고 관리하는 코드실행환경으로서 일종의 데이터 구조(흔히 stack)으로 구현됨.
namespace와 context의 차이
:namespace-변수와 객체의 이름을 매핑하는데 사용되는 시스템.
:context-코드가 실행되는 동안의 상태와 정보를 나타냄.
'컴퓨터프로그래밍' 카테고리의 다른 글
class (0) | 2024.05.20 |
---|---|
paradigm (0) | 2024.05.20 |
예외 처리 (2) | 2024.05.20 |
control structure (0) | 2024.05.20 |
expression, statement (0) | 2024.05.20 |