본문 바로가기
#단편모음/낱 장

[혼공파] C05 함수-230516火

by taeni 2024. 4. 16.

C05 반복문

05-1 함수 만들기
05-2 함수의 활용
05-3 함수 고급


05-1 함수 만들기   (p.226 마무리)
호출은 함수를 실행하는 행위를 말합니다.
매개변수는 함수의 괄호 내부에 넣는 것을 의미합니다.
리턴값은 함수의 최종적인 결과를 의미합니다.
가변 매개변수 함수는 매개변수에 아무것도 넣지 않아도 들어가는 값입니다.
 
05-2 함수의 활용   (p.243 마무리)
재귀 함수 recursion function는 내부에서 자신을 호출하는 함수를 의미합니다.
메모화 memoization는 한 번 계산한 값을 저장해 놓은 후, 이후에 다시 계산하지 않고 저장된 값을 활용하는 테크닉입니다.
조기 리턴 early retruns은 함수의 흐름 중간에 return 키워드를 사용해서 코드 들여쓰기를 줄이는 등의 효과를 가져오는 테크닉입니다.
 
05-3 함수 고급   (p.268 마무리)
튜플 tuple은 리스트와 비슷하지만, 요소를 수정할 수 없는 파이썬의 특별한 문법입니다. 괄호를 생략해서 다양하게 활용할 수 있습니다. 
람다 lambda는 함수를 짧게 쓸 수 있는 파이썬의 특별한 문법입니다.
with 구문은 블록을 벗어날 때 close() 함수를 자동으로 호출해 주는 구문입니다.


05-1 함수 만들기

함수의 기본

# 함수는 한마디로 '코드의 집합'입니다. 함수의 기본 형태는 다음과 같습니다.
def 함수 이름():
	문장

함수에 매개변수 만들기

def 함수 이름(매개변수, 매개변수, ...):
	문장

가변 매개변수

# 가변 매개변수
def 함수 이름(매개변수, 매개변수, ... *가변 매개변수):
	문장

기본 매개변수

# print()함수의 자동 완성 기능으로 나오는 설명
print(value, ..., sep='', end='\n', file=sys.stdout, flush=False)

# '매개변수=값' 👉 기본 매개변수 , (매개변수를 입력하지 않았을 경우 매개변수에 들어가는 기본값)
# *제약사항 : 기본 매개변수 뒤에는 일반 매개변수가 올 수 없다.

키워드 매개변수
● 기본 매개변수가 가변 매개변수보다 앞에 올 때 ( 아래, 왼쪽 사진 )
● 가변 매개변수가 기본 매개변수보다 앞에 올 때 ( 아래, 오른쪽 사진 )

그렇다면 두 가지를 함꼐 사용할 수 있는 방법은 없을까? 
파이썬은 이런 상황에 대비해서 키워드 매개변수라는 기능을 만들었다.

리턴

# input() 함수의 리턴값을 변수에 저장합니다.
value = input("> ")

# 출력합니다.
pring(value)

● 자료 없이 리턴하기

함수 내부에서 출력을 두 번 상요헀는데, 중간에 return 키워드가 들어 있습니다. return 키워드는 함수를 실행했던 위치로 돌아가라는 의미 + 함수를 여기서 끝내라는 의미를 가지고 있습니다.
따라서 return 키워드를 만나는 수간 함수가 종료됩니다.
결과적으로 "A 위치입니다."만 출력하고 프로그램이 종료됩니다.
 
● 자료와 함께 리턴하기

● 아무것도 리턴하지 않기

기본적인 함수의 활용

def 함수(매개변수):
	변수 = 초깃값
    # 여러 가지 처리
    # 여러 가지 처리
    return 변수

p226 확인문제1
방정식을 파이썬 함수로 만들기

p226 확인문제2
매개변수로 전달된 값들을 모두 곱해서 리턴하는 가변 매개변수 함수 만들기

05-2 함수의 활용

재귀 함수
팩토리얼 factorial 연산자 : n! = n * (n - 1) * (n - 2) * .... * 1 

재귀 함수의 문제

조기 리턴
흐름 중간에 return 키워드를 사용하는 것을 조기 리턴 early returns 이라고 부릅니다.

p243 확인문제1
재귀 함수로 만들어서 리스트를 평탄화하는 함수 만들기
리스트 평탄화flatten : 중첩된 리스트가 있을 때 중첩을 모두 제거하고 풀어서 1차원 리스트로 만드는 것

우)type()함수를 사용해서 자료형을 판별

p244 확인문제2
패밀리 레스토랑에서 여러 개의 테이블에 나누어 앉으려고 합니다. 이떄 한 사람만 앉는 테이블이 없게 그룹을 지어야 합니다. 인원 수를 나누는 패턴만 구하면 되며, 누가 어디에 앉는지 등은 고려하지 않아도 괜찮습니다. 예를 들어 6명이라면 다음과 같은 네 가지 경우를 생각할 수 있습니다.

2명 + 2명 + 2명 2명 + 4명  3명 + 3명 6명

한 개의 테이블에 앉을 수 있는 최대 사람의 수는 10명입니다. 100명의 사람이 하나 이상의 테이블에 나누어 앉는 패턴을 구하세요.

05-3 함수 고급 

파이썬은 함수를 조금 더 편리하게 사용할 수 있게 다양한 기능을 제공합니다. 대표적이 것이 튜플tuple과 람다lambda입니다.
튜플 함수와 함께 많이 사용되는 리스트와 비슷한 자료형으로,
리스트와 다른 점은 한번 결정된 요소는 바꿀 수 없다.
람다 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것이 번거롭고, 코드 공간 낭비라는 생각이 들 떄 함수를 간단하고 쉽게 선언하는 방법

튜플

일반적으로 함수와 많이 사용되는 자료형이다.

리스트와 비슷한 자료형이지만, 리스트와 다른 점은 한 번 결정된 요소를 바꿀 수 없다는 것이다.

ㄴ 선언과 생성 후 요소 출력 까지는 같지만, 요소를 변경할 때 차이가 발생하는데,  - 튜플은 내부 요소 변경이 불가능하다.

 

● 괄호 없는 튜플

● 튜플과 함수

 

enumerate()함수와 items()함수를 사용하면 반복 변수를 위(위, 오른쪽 사진)와 같이 입력할 수 있다.

이 때 i, value는 (i, value)형태의 튜플에서 괄호를 제거한 것이다.

 

몫과 나머지를 구하는 divmod()함수도 튜플을 리턴하는 대표적인 함수이다. (오른쪽 위 사진)

ex. (비교) 기본 연산자를 사용해 (왼쪽 위 사진) 몫과 나머지를 구하는 모습

divmod()함수는 튜플 형태로 몫과 나머지를 리턴한다.

괄호 없는 튜플을 사용해 쉽게 변수에 할당하고 사용할 수 있다.

 

람다

요즘 프로그래밍 언어에서는 함수라는 '기능'을 매개변수로 전달하는 코드를 많이 사용합니다.

그리고 이런 코드를 조금 더 효율적으로 작성할 수 있도록 파이썬은 '람다lambda'라는 기능을 제공한다. 

 

● 함수의 매개변수로 함수 전달하기

 함수의 매개변수로 함수를 전달하는 코드

● filter()함수와 map()함수

 함수를 매개변수로 전달하는 대표적인 표준 함수로 map()함수와 filter()함수가 있다.

 

map()함수는 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성해 주는 함수이다.

map(함수, 리스트)

filter()함수는 리스트의 요소를 하뭇에 넣고 리턴된 값이 True이 것으로, 새로운 리스트를 구성해주는 함수이다.

filter(함수, 리스트)

왼쪽과 오른쪽은 같은 기능의 함수이다.

def 키워드로 선언했던 함수를 lambda로 바꾸고, return 키워드를 따로 쓰지 않았다는 정도의 차이가 생겼다.

 

+ 결과창의 <map object>와 <filter object> : 제너레이터generator 라고 부릅니다.

 

● 람다의 개념

많은 개발자들이 매개변수로 함수를 전달하기 위해 함수 구문을 작성하는 것도 번거롭고, 코드 공간 낭비라는 생각이 들어, 람다lambda라는 개념을 생각해냈다.

 

람다는 '간단한 함수를 쉽게 선언하는 방법'이다.

lambda 매개변수: 리턴값

 

람다는 다음과 같이 함수의 매개변수에 곧바로 넣을 수 있어 코드가 굉장히 깔끔해진다.

파일 처리

파일과 곤련된 처리를 하는 함수는 표준 함수가 기본으로 제공된다.

파일은 크게 텍스트 파일 바이너리 파일로 나뉘는 데, 여기서는 '텍스트 파일'과 관련된 내용만 살펴보도록 하겠다.

 

● 파일 열고 닫기

파일을 열 때는 open()함수를 사용한다.

파일 객체 = open(문자열: 파일 경로, 문자열: 읽기 모드)

open() 함수의 첫 번째 매개변수에는 파일 경로path를 입력하고, 두 번째 매개변수에는 모드mode를 지정한다.

모드에는 다음과 같은 것을 지정할 수 있다.

모드 설명
w write 모드 (새로 쓰기 모드)
a append 모드(뒤에 이어서 쓰기 모드)
r read 모드(읽기 모드)

파일을 닫을 때는 close()함수를 사용한다.

파일 객체.close()

※ open() 함수로 열면 close() 함수로 닫는 습관을 길러 주세요.

 

● with 키워드

프로그래밍 프로그램이 길어지면 open() 함수와 close()함수 사이에 많은 코드가 들어간다. 

조건문과 반복문이 들어가다 보면 파일을 열고 닫지 않는 실수를 하는 경우가 생길 수 있는데, 이런 실수를 방지 하기 위해 with 키워드라는 기능이 생겼다.

with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체:
	문장
# 파일을 엽니다.
with open("basic.txt", "w") as file:
	# 파일에 텍스트를 씁니다.
    	file.write("Hello Python Programmig...!")

이렇게 코드를 작성하면 with 구문이 종룔될 때 자동으로 파일이 닫힌다. 따라서 파일을 열고 닫지 않는 실수를 줄일 수 있다.

● 텍스트 읽기

파일에 텍스트를 쓸 때는 write() 함수를, 반대로 파일을 읽을 때는 read() 함수를 쓴다.

파일을 열고 파일 객체의 read()함수를 호출하기만 하면 내부에 있는 데이터를 모두 읽어 출력한다.

파일 객체.read()

 

● 텍스트 한 줄씩 읽기

텍스트를 사용해 데이터를 구조적으로 표현할 수 있는 방법으로 CSV, XML, JSON 등이 있다.

CSV 는 Comma Separated Values 의 줄임말로, 수미표로 구분된 값들을 의미한다.

 

다음과 같은 데이터가 CSV 형식의 대표적인 예이다.

이름, 키, 몸무게     //첫 번째 줄에 헤더header를 넣어 각 데이터가 무엇을 나타내는지 설명
윤인성, 176, 62
연하진, 169, 50

데이터를 한 줄씩 읽어 들일 때는 for 반복문을 다음과 같은 형태로 사용한다.

for 한 줄을 나타내는 문자열 in 파일 객체:
	처리

p268 확인문제1

p268 확인문제2  : 기본적인 람다와 조건식 문제