파이썬

파이썬 4일차 - 함수

aisw7984 2024. 10. 11. 15:23
반응형

5-1 함수 만들기



함수란? 
 일반적으로 사용하는 함수는 만들어진 함수를 불러오는 형태이다. 즉 함수를 사용한다는 것은 기록을 불러오는 것이다. 대부분의 함수는 전달값을 요구한다. 전달값은 흔히 "매개변수"라고 불린다.
함수를 호출하고 나면 ,함수 호출의 결과로 값이 생기는 경우가 있는데 이런 값을 "리턴값"이라고 한다.

아래와 같이 식별자(함수이름) 뒤에 괄호에 넣은 매개변수 값이 함수 내부의 코드를 거쳐 리턴값을 준다.
def 함수이름(매개변수): 

    내용
def는 defnition의 약자로 함수를 정의하겠다는 일종의 선언이다.
()에는 여려 개의 매개변수를 요구할 수 있다. 문장은 추후 함수를 호출했을 때 실핼할 동작을 의미한다.

 

가변 매개변수 : 매개변수의 개수가 정확히 정해 지지 않았을 때 사용하는 것으로 앞에 ' * '를 넣어주면 됨

가변 매개변수를 사용할 때는  함수(매개변수, 가변 매개변수)와 같이 매개변수 뒤에 써주어야 하고 사용 후 다른 매개변수를 넣을 수었다.
기본 매개변수 : 함수를 만들 때 기본적으로 매개변수에 값을 할당시켜 호출 시 쓰지 않아도 되는 매개변수를 의미한다. 그러나 해당 위치에 매개변수를 넣으면 넣은 매개변수로 바뀐다
기본 매개변수 또한 사용 후 뒤에 매개변수를 넣을 수 없다. / SyntaxError오류
키워드 매개변수 : 가변 매개변수와 기본 매개변수가 포함된 함수에 기본 매개변수를 수정할 수 있게 키워드를 사용하여 수정할 수 있게 한다. 즉, 함수를 사용할 때 키워드를 지정해서 변수를 입력하면 함수에 저장된 기존 정보(기본 매개변수)를 바꿀 수 있다.

* 함수 만들기 정리 *
함수를 만들 때는 '선택적으로' 매개변수와 리턴값을 활용할 수 있다. 

즉 필수는 아닌데 함수 자체를 풍부하게 만들어준다.
함수의 형태 : 

1. 매개변수:X, 리턴값:X

2. 매개변수:O, 리턴값:X 

3. 매개변수:X, 리턴값:O

4. 매개변수:O, 리턴값:O 

 

5-2 함수의 활용


재귀함수 : 자기 자신을 호출하는 함수, 무한히 반복할 것이 아니라면 '종료해 주는 값(종료 조건)'이 필요 
재귀함수는 코드를 간단하게 만들 수는 있으나 같은 동작을 계속 반복하기 때문에 동작이 오래 걸림

이를 해결하기 위해 기존 값을 저장해 두고 불러오면 이를 해결할 수 있는데  메모화(memoization)라는 것을 한다. 추가적으로 해당 함수뿐 아니라 코드 어디서든 사용하고자 한다면 global을 사용한다.

global은 해당하는 코드 어디서든 쓸 수 있도록 해주는 것으로 전역 변수 라고 한다. 일반적으로 global을 사용할 때 자주 사용하는 변수들은 사용하지 않는다 (오류발생 확률이 많아서). 만약 전역 번수를 써주지 않고 함수에서 호출을 하게 된다면 아래의 오류가 발생한다.

UnboundLoaclErorr : 함수 안에서 함수 안에 존재하지 않는 변수를 불러오려고 할 때 발생하는 오류

Tip. 기존에 사용하던 변수들은 지역변수들로 해당 함수 안에서만 사용할 수 있는 것들이다.




5-3 함수 고급


파이썬과 관련된 교육을 하다 보면 앞서배운 list와 dictionary 자료형 만큼 많이 접할 수 있는 것이 아래의 튜플이다.
튜플(tuple) : 리스트와 비슷한 자료형인데 한번 생성된 정보를 지울 수 없음 - 소괄호 사용
ex) (데이터, 데이터, 데이터...........)
하나의 요소를 가지는 튜플 : (데이터, ) <- 튜플을 생성할 때는 최소 1개의 쉼표가 필요
튜플과 리스트의 경우 선언과 값을 같이 넣을 수 있다.
 [a, b] = [10, 20] / (a,b) = (10, 20) / [a,b] = (10, 20)
 튜플의  경우 소괄호가 없어도 작동을 할 때가 있다. 리스트에서 할 수 있는 기능 대부분 적용 가능(파괴적 동작만 안됨) 

콜백함수(callback function) : 함수를 매개변수로 사용하는 함수 -매개변수로 사용하는 함수는 ()를 쓰지 않음
함수를 매개변수로 사용하는 대표적인 표준 함수는 map()과 filter()가 있다.
map():리스트의 요소를 함수에 넣고 리턴된 값으로 새 리스트를 구성해 줌
filter() :  리스트의 요소를 함수에 넣고 리턴된 값이 True 인 것으로 새로운 리스트를 구성해줌
map과 filter는 print로 출력했을 때 바로 안 나오고 list로 변형시켜야지 나옴 
둘은 제너레이터의 일종인데 이는 값을 하나씩 내보내면서 소진한느 형태로 동작하는 데이터를 말한다.

람다(lamda) : lamda 매개변수 : 리턴값
함수가 너무 길다고 느껴질 때 간결하게 작성하도록 도와주는 표현식이다. -리스트 내포 같은 느낌
람다는 이름 없이 기능만 만들 수 있는 형태로 콜백함수가 필요한 상황에 사용한다.
람다를 인라인으로 매개변수 위치에 사용하는 것은 그 함수를 특정장소에서만 사용한다고 생각하면 나쁘진 않을 듯?

파일 처리
파이썬 프로그래밍을 통해서 다양한 파일을 생성, 실행(불러오기)이 다룰 수 있다.
파일의 구분
-텍스트 파일 : 텍스트 파일 형식(txt, 코드(py, c, java) 등)
- 바이너리 파일 : 이미지, 동영상, 응용 프로그램 등
파일 열기 :파일 객체 =  open(문자열 : 파일 경로, 문자열 :  모드)
모드 종류 : w - 기존 내용을 모두 지우고 새로운 내용 쓰기 (덮어쓰기)
               만약 W모드로 존재하지 않는 파일을 열려고 한다면 그 파일을 자동 생성한다.
            a - 기존 내용에서 이어서 내용추가
           r - 기존에 내용을 읽음(쓰기 불가)
open을 썼다면 이를 닫아주는 close()가 필요하다.
open의 첫 번째 값은 파일의 위치(파일명 포함)이다
만일, 파일명만  쓸 경우, 실행위치로 자동 인지된다.
open를 쓰면 close가 실행되어야 하는데 close 쓰지 않는 것을 방지하고자
with를 사용하면 close를 굳이 쓰지 않아도 된다. 
CSV는 엑셀과 같이 행과열로 된 데이터를 의미하는데 이는 메모장에서도 만들 수 있고 어느 프로그램이든지 호환이 된다
코딩에서 파일을 불러오거나 작성할 때 한글이 깨지는 오류가 발생하는데 이때는 encoding ="utp-8"을 적용해 주면 해결된다.

제너레이터 함수 :이터레이터를 직접 만들 때 사용하는 코드
yield : 함수에 yield 키워드가 포함될 경우 제너레이터가 된다,
이는 정해진 사용 방법대로 사용해야만 실제로 동작하고, 데이터를 발생시킨다.
스택 : 기본자료형 - 변수(식별자)가 저장되는 메모리 영역의 이름 + 가장 외과에 있는 스택은 전역스택이라고 한다
heep : 객체 자료형 - 데어터가 저장되는 메모리 영역의 이름

변수가 문자열, list,  dic과 같은 경우 전역에는 그 자료를 불러올 이름이 저장되고 hip에 내용이 들어간다.

기본자료형을 매개변수로 전달하면
값의 복사가 일어나므로 원본에는 타격이 없다
객체 자료형의 경우 매개변수로 전달하면
값의 참조가 일어나 원본의 변화가 있게 된다.

반응형