데코레이터(decorator)는 일종의 래퍼(wrapper)입니다. 함수 자체의 코드를 전혀 수정하지 않으면서도, 해당 함수가 실행되기 전과 후에 원하는 코드를 추가로 실행할 수 있게 해주는 강력한 기능입니다.데코레이터 체인 예제여러 개의 데코레이터를 하나의 함수에 연달아 적용하는 것을 데코레이터 체인이라고 합니다. 아래 예제는 hello 함수를 두 개의 데코레이터(@makebold, @makeitalic)로 감싸는 코드입니다.def makebold(fn): def wrapped(): return <b&g
함수에 전달되는 인자(argument)의 개수와 이름을 추출하고 싶다면 파이썬의 inspect 모듈을 사용하면 됩니다. 예를 들어 어떤 함수의 매개변수 목록을 (arg1, arg2) 형태로 얻어야 할 때 이 모듈이 유용하게 활용됩니다.아래 코드는 inspect 모듈을 사용해 aMethod와 foo 함수 내부에 정의된 매개변수 정보를 조회하는 방법을 보여줍니다.예제import inspect def aMethod(arg1, arg2): pass print(inspect.getargspec(aMethod)) def foo(a,b,c=4,
재귀(Recursion)는 함수가 자기 자신을 본문 안에서 한 번 이상 호출하는 프로그래밍 기법입니다. 일반적으로 함수는 자신을 호출한 결과의 반환값을 그대로 반환하며, 이런 방식으로 정의된 함수를 재귀 함수(recursive function)라고 부릅니다. 재귀 함수의 종료 조건 재귀 함수가 프로그램에서 정상적으로 동작하려면 반드시 종료되어야 합니다. 재귀 호출이 일어날 때마다 해결해야 할 문제의 크기가 점점 작아지고, 더 이상 추가적인 재귀 없이도 답을 구할 수 있는 기저 사례(base case)에 도달해야 합니다. 만약 호출
파이썬에서는 하나의 메서드를 여러 가지 방식으로 호출할 수 있도록 정의할 수 있습니다. 함수 정의에 따라 매개변수 없이 호출하거나, 하나, 두 개 또는 그 이상의 매개변수와 함께 호출할 수 있습니다. 이처럼 같은 이름의 메서드를 다양한 형태로 호출하는 기법을 메서드 오버로딩(Method Overloading)이라고 합니다.다만 자바나 C++와 달리 파이썬은 전통적인 의미의 오버로딩 문법을 지원하지 않습니다. 대신 기본 매개변수(default parameter)를 활용하면 동일한 효과를 얻을 수 있습니다.아래 예제에는 sayHello
프로그래밍에서 전역(global)과 지역(local)이라는 용어는 변수가 스크립트나 프로그램 내에서 도달할 수 있는 범위, 즉 스코프(scope)를 나타냅니다. 전역 변수는 프로그램 어디에서든 접근할 수 있는 반면, 지역 변수는 자신이 선언된 함수나 코드 블록 내부에서만 접근할 수 있으며 외부에서는 참조할 수 없습니다. 전역 변수란 무엇인가? 전역 변수는 함수 외부, 즉 모듈의 최상위 레벨에서 정의하고 선언하는 변수입니다. 이렇게 선언된 변수는 별도의 제한 없이 프로그램 전체 어디에서든 읽고 사용할 수 있습니다. 지역 변수와 이름
Python에서는 inspect 모듈의 getsource() 메서드를 사용하여 함수나 클래스 등 객체의 소스 코드를 손쉽게 확인할 수 있습니다.inspect.getsource(object)getsource() 메서드란?inspect.getsource()는 인자로 전달된 객체에 대한 소스 코드 텍스트를 반환합니다. 인자로 사용할 수 있는 객체는 다음과 같습니다.모듈(module)클래스(class)메서드(method)함수(function)트레이스백(traceback)프레임(frame)코드 객체(code object)반환되는 소스 코드는
Python에서는 types 모듈의 types.FunctionType() 함수를 활용하면 런타임에 함수를 동적으로 정의하고 바로 실행할 수 있습니다. 동적 함수 정의의 기본 원리 핵심 아이디어는 실행하고자 하는 코드를 문자열 형태로 준비한 뒤, 내장 함수 compile()을 사용해 이를 코드 객체(code object)로 변환하는 것입니다. 그다음 types.FunctionType()에 이 코드 객체와 전역 네임스페이스 역할을 할 딕셔너리를 전달하면, 실제로 호출 가능한 함수 객체가 생성됩니다. 실행 예제 아래 예제는 Python
파이썬의 일급 함수(First-Class Function)란?파이썬은 일급 함수(first-class function)를 지원합니다. 실제로 파이썬의 모든 함수는 일급 객체이며, 이는 함수를 다른 일반 값과 동일하게 취급할 수 있다는 의미입니다.따라서 파이썬에서는 다음과 같은 작업이 모두 가능합니다.함수에서 또 다른 함수를 반환하기리스트나 딕셔너리 같은 컬렉션에 함수를 저장하기함수를 일반 변수나 객체처럼 전달하고 조작하기특히 함수 내부에 다른 함수를 정의하고, 그 내부 함수를 외부로 반환하는 것도 아무런 제약 없이 구현할 수 있습니
파이썬에서 함수를 인수로 전달하기파이썬에서는 함수가 일급 객체(first-class object)로 취급됩니다. 따라서 함수를 변수에 할당하거나, 다른 함수의 반환값으로 사용하거나, 다른 함수의 인수로 전달하는 것이 모두 가능합니다.첫 번째 매개변수로 함수를 받는 대표적인 내장 함수가 바로 map()입니다.map(function, iterable, ...) — 반복 가능한 객체(iterable)의 모든 항목에 지정된 함수를 적용하고, 그 결과를 반환합니다.내장 함수뿐만 아니라, 직접 작성한 커스텀 함수에도 함수를 인수로 전달할 수
재귀(recursion)는 함수가 자기 자신을 다시 호출하는 프로그래밍 기법입니다. 파이썬에서는 이 기법을 활용하면 팩토리얼(계승)처럼 반복 구조를 가진 문제를 매우 간결한 코드로 해결할 수 있습니다.팩토리얼은 1부터 n까지의 모든 양의 정수를 곱한 값으로, 보통 n!로 표기합니다. 예를 들어 6! = 6 × 5 × 4 × 3 × 2 × 1 = 720입니다.재귀 함수 예제다음 코드는 n = 6과 n = 15에 대한 팩토리얼을 계산합니다.def factorial(n): if n == 1: return 1
파이썬에서 함수는 단순한 코드 블록이 아니라 완전한 객체(full object)입니다. def 문을 사용하거나 람다(lambda) 표현식을 작성하면, 파이썬은 자동으로 함수 객체를 생성해 줍니다.함수 객체에 속성 할당하기함수가 객체이기 때문에 일반 객체처럼 속성(attribute)을 할당하고 다시 조회할 수 있습니다. 아래 예제를 통해 확인해 보겠습니다.예제 코드def foo(): pass foo.score = 20 print(type(foo)) print(foo.score) print(type(lambda x: x))실행 결과위
파이썬 코드를 보다 보면 __init__, __str__, __len__처럼 이름 앞뒤에 이중 밑줄(double underscore)이 붙은 함수나 메서드를 자주 만나게 됩니다. 이런 이름들은 흔히 던더(dunder, double underscore의 줄임말) 메서드 또는 매직 메서드(magic method)라고 불립니다.이중 밑줄 이름의 정체앞뒤로 이중 밑줄이 붙은 이름은 파이썬 인터프리터가 내부적으로 특별한 용도로 사용하기 위해 예약해 둔 이름입니다. 대표적인 예는 다음과 같습니다.__init__: 객체가 생성될 때 자동으로 호
명령줄에서 파이썬 함수 실행하기파이썬 모듈(foobar)에 정의된 함수를 터미널에서 바로 실행해야 할 때가 있습니다. 이럴 때 python 명령의 -c(command) 옵션을 사용하면 별도의 스크립트 파일 없이 한 줄의 코드로 함수를 호출할 수 있습니다.1. 모듈 전체 임포트 후 함수 호출$ python -c import foobar; print(foobar.sayHello())모듈을 통째로 가져온 뒤 모듈이름.함수이름() 형태로 호출하는 가장 기본적인 방식입니다.2. 와일드카드(*)로 모든 함수 임포트$ python -c from
명령줄에서 파이썬 모듈 호출하기파이썬 스크립트를 모듈(module)로 사용할 계획이라면, 작성한 코드가 의도대로 동작하는지 직접 테스트해 볼 필요가 있습니다. 가장 간단한 방법은 스크립트 하단에 함수 호출 코드를 추가하고, 명령 프롬프트(터미널)에서 직접 실행하는 것입니다.1. 테스트용 함수 호출 추가예를 들어 다음과 같이 유용한 기능을 수행하는 함수가 있다고 가정해 보겠습니다.def fubar(): # 유용한 작업을 수행하는 코드 print(모듈이 정상적으로 실행되었습니다!)fubar()스크립트 맨 아래에 fubar()
현대의 웹 브라우저에는 Python 인터프리터가 내장되어 있지 않기 때문에, Python 코드를 브라우저에서 직접 실행하는 것은 불가능합니다. Flash나 ActiveX 같은 별도의 플러그인 없이 브라우저에서 기본적으로 동작하는 언어는 사실상 JavaScript가 유일합니다.대안: 트랜스파일러(Transpiler) 활용하기브라우저 환경에서 Python 스타일의 코드를 사용하고 싶다면 트랜스파일러를 활용하는 방법이 있습니다. 트랜스파일러는 Python 코드를 JavaScript로 변환(컴파일)해주는 도구로, 개발자는 Python으로
전역 변수(Global Variable)란?전역 변수는 프로그램 전체 범위에서 접근할 수 있는 변수입니다. 함수 외부에서 선언되며, 모듈 내 어디에서든 읽고 사용할 수 있습니다.지역 변수(Local Variable)란?지역 변수는 현재 스코프(scope) 안에서만 접근할 수 있는 변수입니다. 대표적으로 하나의 함수 정의 내부에서만 사용되는 임시 변수가 여기에 해당합니다. 함수 실행이 끝나면 지역 변수는 메모리에서 사라지므로, 함수 밖에서는 참조할 수 없습니다.예제 코드다음 코드를 통해 두 변수의 차이를 확인해 보겠습니다.q = I
람다(Lambda) 함수는 실행 시점(runtime)에 생성되는 익명의 한 줄짜리 함수입니다. 일반적인 함수처럼 def 문으로 이름을 붙여 정의하는 것이 아니라, 함수가 필요한 자리에서 즉석으로 만들어 사용할 수 있다는 점이 가장 큰 특징입니다. 람다 함수에는 return 문이 포함되지 않으며, 항상 하나의 표현식(expression)을 평가한 결과를 그대로 반환합니다. 또한 함수 객체가 요구되는 위치라면 어디든 람다 정의를 넣을 수 있습니다. 람다 함수의 주요 특징 익명 함수: 함수 이름 없이 정의되며, 필요하다면 변수에 할
파이썬 익명 함수란?파이썬에서 익명 함수(anonymous function)는 이름 없이 정의되는 함수를 의미합니다. 일반적인 함수는 def 키워드를 사용해 이름을 붙여 정의하지만, 익명 함수는 lambda 키워드를 사용해 정의합니다. 이러한 이유로 익명 함수는 람다 함수(lambda function)라고도 불립니다.람다 함수는 한 줄로 간단한 연산을 수행할 때 특히 유용하며, 함수를 잠깐 사용하고 버리는 일회성 상황에서 코드를 깔끔하게 유지할 수 있도록 도와줍니다.람다 함수의 기본 문법lambda 인수: 표현식예를 들어 두 수를
Python에서 함수를 정의할 때 인수의 개수가 정해지지 않은 경우가 종종 있습니다. 이럴 때 유용하게 사용되는 것이 바로 *args와 **kwargs입니다. 이 두 매개변수를 활용하면 함수가 임의의 개수의 인수를 받아들일 수 있어 코드의 유연성이 크게 향상됩니다.*args란 무엇인가?단일 별표(*) 형태의 *args는 함수에 키워드가 없는(non-keyworded) 가변 길이 인수 목록을 전달할 때 사용됩니다. 여기서 중요한 것은 별표(*) 기호이며, 관례적으로 붙이는 args라는 이름과 함께 키워드가 없는 가변 길이 인수 목록이
파이썬에서 변수는 값을 할당하는 순간 정의됩니다. C 언어 등 다른 언어처럼 사용하기 전에 타입과 함께 미리 선언할 필요가 없으며, 그냥 바로 사용하기 시작하면 됩니다.x = 141파일이나 모듈의 최상위 레벨에서 선언된 변수는 전역 범위(global scope)에 속하며, 함수 내부에서도 접근할 수 있습니다.다만 좋은 코드를 위해 기억해야 할 원칙이 있습니다. 변수는 자신의 역할을 수행하는 데 필요한 가장 좁은 범위(narrowest scope)를 가져야 한다는 것입니다. 불필요하게 전역 변수를 남발하면 코드의 예측 가능성과 유지보