p.287 손코딩: 범위 내부의 정수를 모두 더하는 함수 실행 후 코드가 입력된 화면 & 실행 결과 캡쳐
매개변수, 기본 매개변수, 가변 매개변수 정리
❤ 05-1 함수 만들기
* 함수를 호출한다는 여러 가지 자료를 저장할 수 있는 자료이다. 함수를 호출할 때 괄호 내부에 넣는 여러 가지 자료를 매개변수라고 한다. 함수를 호출해서 최종적으로 나오는 결과를 리턴값이라고 한다.
* 함수의 기본
def 함수 이름(): 문장 |
* 함수에 매개변수 만들기
def 함수 이름(매개변수, 매개변수, ...): 문장 |
* 매개변수와 관련된 TypeError
① 함수를 생성할 때 매개변수를 만들었는데, 함수를 호출할 때 매개변수를 넣지 않는 경우
② 함수를 생성할 때 매개변수를 만들었는데, 함수를 호출할 때 매개변수를 더 많이 넣는 경우
* 가변 매개변수
앞의 함수는 함수를 선언할 때 매개변수와 함수를 호출할 때의 매개변수가 같아야했다. 그러나 가변 매개변수 함수는 매개변수를 원하는 만큼 받을 수 있다. (매개변수 개수가 변할 수 있다는 의미의 가변)
def 함수 이름(매개변수, 매개변수, ...,*가변 매개변수):
문장
✔ 가변 매개변수 뒤에는 일반 매개변수가 올 수 없다.
✔ 가변 매개변수는 하나만 사용할 수 있다.
* 기본 매개변수
✔ 기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.
* 키워드 매개변수
매개변수 이름을 지정해서 입력하는 매개변수
a는 일반 매개변수이므로 해당 위치에 반드시 입력(1번)
일반 매개변수이지만 키워드 형태로도 사용할 수 있다.(2,3번)
키워드를 지정하는 매개변수를 입력하는 경우에는 매개변수 순서를 원하는 대로 입력할 수 있다.(3번)
4번은 b를 생략한 형태로, 이렇게 키워드 매개변수를 사용하면 필요한 매개변수에만 값을 전달할 수 있다.
일반 매개변수는 필수로 입력해야한다.
* 리턴
# input() 함수의 리턴값을 변수에 저장
value = input("> ")
print(value)
* 리턴 - 자료 없이 리턴하기
함수 내부에서는 return 키워드를 사용할 수 있다. 이 키워드는 함수를 실행했던 위치로 돌아가라는 뜻으로, 함수가 끝나는 위치를 의미한다.
* 리턴 - 자료와 함께 리턴하기
* 리턴 - 아무것도 리턴하지 않기
* 기본적인 함수의 활용
def 함수(매개변수): 변수 = 초깃값 # 여러 가지 처리 # 여러 가지 처리 ... return 변수 |
초깃값 설정 output=0으로 변수를 초기화한 뒤에 사용했음. (그래야 연산 결과값에 변화를 주지 않으므로)
❤ 05-2 함수의 활용
* 재귀 함수
팩토리얼로 재귀 함수 알아보기 ~!
* 재귀 함수의 문제
한 번 구했던 값도 처음부터 다시 계산하므로 연산 시간이 오래 걸림.
→ 메모화 : 딕셔너리를 사용해서 한 번 계산한 값을 저장하는 것을 메모한다고 표현한다. 딕셔너리에 값이 메모되어 있으면 처리를 수행하지 않고 곧바로 메모된 값을 돌려주면서 코드의 속도를 빠르게 만드는 것이다. (재귀함수와 함께 많이 사용되는 기술)
* UnboudLocalError에 대한 처리
global counter라는 8행 코드를 지우고 실행하면 UnboundLocalError 오류가 발생하는데, 이는 파이썬은 함수 내부에서 함수 외부에 있는 변수를 참조하지 못하기 때문이다. 그래서
global 변수이름 |
과 같이 global 키워드를 이용해서 함수 내부에서 함수 외부에 있는 변수라는 것을 알려주면 된다.
* 조기 리턴
과거에는 프로그래밍을 할 때 변수는 반드시 앞쪽에서 몰아서 선언하고, 리턴은 반드시 뒤쪽에서 해야한다는 비공식적인 규칙이 있었지만 요즘에는 필요할 때 하면 된다는 인식이 퍼졌다.
❤ 05-3 함수 고급
* 튜플과 람다
- 튜플 : 함수와 함께 많이 사용되는 리스트와 비슷한 자료형으로, 리스트와 다른 점은 한번 결정된 요소는 바꿀 수 없다는 점이다.
- 람다 : 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭고, 코드 공간 낭비라는 생각이 들 때 함수를 간단하고 쉽게 선언하는 방법이다.
* 튜플
(데이터, 데이터, 데이터, ...) |
>>> tuple_test = (10, 20, 30)
>>> tuple_test[0]
10
>>> tuple_test[1]
20
>>> tuple_test[2]
30
위 코드는 튜플을 선언해 생성한 후 각 요소를 출력한 것이다. 이것만 보면 튜플과 리스트에는 차이가 없지만, 요소를 변경하려 하면 오류가 난다.
>>> tuple_test[0] = 1
코드를 입력하면 TypeError가 발생한다. 튜플은 내부 요소 변경이 불가능하기 때문이다.
* 괄호 없는 튜플
또 a, b = 10, 20을 a, b = b, a 코드를 통해 값을 교환할 수도 있다.
* 함수의 매개변수로 함수 전달하기
* fileter()함수와 map() 함수
함수를 매개변수로 사용하는 대표적인 표준 함수로 map() 함수와 filter() 함수가 있다.
map() 함수는 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성해주는 함수이다.
map(함수, 리스트) |
flter() 함수는 리스트의 요소를 함수에 넣고 리턴된 값이 True인 것으로, 새로운 리스트를 구성해주는 함수이다.
filter(함수 리스트) |
* 람다
람다는 '간단한 함수를 쉽게 선언하는 방법'이다.
lambda 매개변수: 리턴값 |
power() 함수와 under_3() 함수를 람다로 변환하면
power = lambda x: x*x under_3 = lambda x: x<3 |
코드가 된다. def 키워드로 선언했던 함수를 lambda로 바꾸고, return 키워드를 따로 쓰지 않았다는 정도의 차이가 생긴다.
* 파일 처리
ⓐ 파일 열기
파일 객체 = open(문자열: 파일 경로, 문자열: 읽기 모드) |
ⓑ 파일 닫기
파일 객체.close() |
ⓒ with 키워드
프로그램이 길어지면 open() 함수와 close() 함수 사이에 많은 코드가 들어가므로 파일을 열고 닫지 않는 실수를 하는 경우가 생길 수 있으므로 이런 실수를 방지하기 위해 with 키워드를 사용한다.
with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체: 문장 |
ⓓ 텍스트 읽기
파일 객체.read() |
ⓔ 텍스트 한 줄씩 읽기
텍스트를 사용하여 데이터를 구조적으로 표현할 수 있는 방법으로 CSV, XML, JSON 등이 있다.
CSV(Comma Separated Values)는 쉼표로 구분된 값들을 의미한다.
이름, 키, 몸무게 → 헤더 윤인성, 176, 62 연하진, 169, 50 → 데이터 |
for 한 줄을 나타내는 문자열 in 파일 객체: 처리 |
콜백 함수를 람다로 바꾸기 p.340
딕셔너리 오름차순 정렬하기 p.341
+ 함수의 값 복사와 레퍼런스 복사
파이썬은 함수를 호출할 때 함수 내부 코드를 실행하기 위해 함수 내부의 변수를 저장할 스택을 추가로 만든다.
def 함수(b):
c=10
a=10
함수(a)
이 코드를 실행하면 메모리에 2개의 스택이 만들어지는데, 가장 외곽에 있는 스택을 전역 스택이라고 한다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ정리ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'파이썬' 카테고리의 다른 글
🐱🐉 혼공파 6주차 CH07-2~08 🐱🐉 (0) | 2022.08.16 |
---|---|
🎁 혼공파 5주차 CH06~07-1 🎁 (0) | 2022.08.08 |
❣️ 혼공파 3주차 CH04 ❣️ (0) | 2022.07.23 |
💐 혼공파 2주차 CH2-3~03 💐 (0) | 2022.07.15 |
🌻 혼공파 1주차 CH1~2-2 🌻 (0) | 2022.07.09 |