일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Keras
- class
- 맴버연산자
- built-in function
- PYTHON
- 실수
- 식별연산자
- 정수
- nextjs
- 깃모지
- mnist
- 메서드채이닝
- Colab
- neural network
- f-string
- randrange
- ITER
- choice
- self
- 메서드
- 구글코랩
- 캐시의 지역성
- gitmoji
- 추상 클래스
- 인공신경망
- cache locality
- Next.js
- 비공개 속성
- 정적 메서드
- __init__
- Today
- Total
IT world
[Python] 24.01.17 함수 심화(2)와 모듈에 대해서 본문
오늘은 함수의 심화(클로저, 데코레이터, args/kwargs, 제너레이터, nonlocal)와 모듈에 대해 교육을 받았다.
예외처리, 람다, 이터레이터은 앞 게시물에서 내용을 다뤘으니 해당 내용을 참고하면 될 것 같다.
클로저(Closure)란
함수 내 함수가 외부 변수를 참조하여 보존하는 것을 말한다.
즉 어떤 함수의 내부 함수가 외부 함수의 변수를 참조할 때, 외부함수가 종료된 후에도 내부 함수가 외부 함수의 변수를 참조할 수 있도록 어딘가에 저장하는 함수를 의미한다.
클로저 함수는 아래 조건을 충족해야한다.
- 어떤 함수의 내부 함수일 것
- 그 내부 함수가 외부 함수의 변수를 참조할 것
- 외부 함수가 내부 함수를 리턴할 것
해당 inner_function() 함수는 클로저 함수이며 outer_function()함수의 내부 함수로 존재하고 외부함수인 outer_function()의 x값을 참조하고 있으며 outer_function함수가 inner_function함수를 반환하고 있는 클로저 조건을 충족하고 있다.
inner_function 함수는 외부함수의 변수 x를 참조하고 있으므로 x의 상태를 기억하고 있다. 따라서 해당 출력 결과를 확인할 수 있다.
데코레이터(Decorator)란
함수나 메서드에 적용되어, 해당 함수나 메서드의 기능을 확장하거나 추가, 변경하는 역할로 @기호와 함꼐 사용되며 함수 또는 메서드 위에 위치한다.
데코레이터는 기본적으로 함수를 인자로 받고, 또 다른 함수를 반환하는 고차 함수이다. 데코레이터를 사용한 함수는 자기 자신을 인자로 사용하여 해당 함수에 사용된다.(하나 함수를 인자로 받아 기능 추가 또는 변경된 새로운 함수를 반환)
simple_decorator 함수는 데코레이터 함수로, 인자로 받는 function 파라미터는 실제 수행되는 함수 hello 함수를 인자로 받아 wrapper 함수를 반환한다 hello 함수를 호출하면 데코레이터가 추가한 내용과 함께 hello 함수의 내용이 출력된다.
*args란
*args(아규먼츠)는 임의의 개수의 인수(arguments)를 뜻하며 여러 개의 인수를 받아서 튜플 형태로 저장해준다.
여러개의 인자값을 받겠다는 의미로, 가변인자를 위한 변수인데, 한마디로 우리가 함수를 만들때 인자를 몇개 받아야할지 모르는 경우 사용하는 변수이다.
이렇게 여러개의 인자를 하나의 변수로 받을 때 사용하며, 전달된 값 모두 하나의 변수(args)에 묶인 것을 볼 수 있고 튜플을 통해 패킹된 것을 확인할 수있다.
일반 파마미터와 함께 사용한다면 일반 파라미터에 각각 값을 할당한 후 남은 개수의 값을 패킹한다. 다만 이렇게 선언할 때에는 아규먼트 뒤로 일반 파라미터를 사용하지 않도록 해야한다.
**kwargs란
*kwargs(기워드 아규먼츠)는 딕셔너리로 가변 아규먼트를 받을 수 있는 방법이다. 여러개의 키워드 인수를 받아 딕셔너리 형태로 저장된다.(**kwargs는 (키워드=특정 값) 형태로 함수를 호출하고 kwargs {'키워드':'특정 값'} 형태로 저장)
제너레이터(Generator)란
제너레이터는 이터레이터를 생성해주는 함수로, yield 키워드를 사용하여 만든다.
이 객체를 호출할때마다 yield가 작동하여 값을 순차적으로 산출한다.(함수의 내부 로컬 변수를 통해 내부 상태가 유지된다.)
제너레이터는 함수 실행 중간에 값을 반환할 수 있고, 이후 함수의 실행을 계속할 수 있는 특징을 가지고 있다(내부 값이 유지됨) 이를 통해 메모리를 효율적으로 관리하며 코드의 가독성을 향상시킨다.
my_generater 함수는 x에서 할당 받은 값을 yield로 i값으로 넘겨주고 다시 호출될때까지 대기하며 이를 통해 넘겨주는 값이 없을 때까지 순회하며 출력한다.
nonlocal이란
파이썬의 키워드 중 하나로, 중첩 함수 내부에서 바깥 함수의 변수를 참조할 수 있게 한다.
말 그대로 해당 변수는 local이 아니다라고 선언해주는 키워드다. 즉 상위 함수에 변수를 참조한다고 미리 선언하는 것. 전역변수를 제외한 바로 위의 함수에서 사용되는 변수와 바인딩 되어 참조하도록 한다.
nonlocal을 사용할떄는 반드시 참조하는 변수가 실제로 바깥 함수에 존재하는지 확인해야한다.
모듈(module)이란
모듈은 함수나 변수 또는 클래스를 모아 놓은 파이썬 파일로 다른 파이썬 코드에서 그것들을 불러와 재사용할 수 있도록 한 것이다.
모듈은 한 번 작성한 코드를 여러 프로젝트나 여러 곳에서 사용할 수 있기 때문에 재사용성이 높고, 유지보수하기 쉽다. 또한 모듈은 자체의 네임스페이스를 갖기 때문에 모듈간에 같은 변수가 있다고 하더라도 충돌 없이 코드를 구조화 할 수 있다.
import info # info.py를 가져오겠다
print(info.name) # 이런식으로 info라는 파이썬 파일 내에 작성된 변수와 함수를 호출한다.
info.hello()
코드 작성자인 내가 직접 info.py 파일을 만들어 해당 파이썬 파일에서 변수와 함수를 호출한 예시이다.
'모두의 연구소(오름캠프) > AI 모델 활용 백엔드 개발 과정' 카테고리의 다른 글
[Python] 24.01.22 Pandas (0) | 2024.01.22 |
---|---|
[Python] 24.01.18 기타 내용과 정규표현식 (0) | 2024.01.18 |
[Python] 24.01.16 Folium과 함수 심화 (0) | 2024.01.16 |
[Python] 24.01.15 클래스 심화 (0) | 2024.01.15 |
[Python] 24.01.12 클래스 반복 (0) | 2024.01.12 |