Python

1-6-3. 함수

함수 들어가기 전 자료형
튜플

리스트와 비슷한 자료형이지만,
요소를 바꿀 수 없다는 차이가 있음

사용 형식

# 튜플 형태
튜플 = (데이터1, 데이터2, 데이터3)
# 리스트 형태
리스트 = [요소1, 요소2, 요소3]

튜플 변경 시도 시

tuple_test = (1, 2, 3)

# 튜플 값 출력
print(tuple_test[0])
print(tuple_test[1])
print(tuple_test[2])

# 튜플 변경 시도. 오류 발생 부분입니다.
tuple_test[0] = 10
함수

여러가지 튜플의 형태

요소를 하나만 가지는 튜플

리스트의 경우 요소를 하나만 가지면
[요소]의 형태로 만들어지게 되지만
튜플의 경우는 (데이터)를 사용하게 되면
단순히 숫자를 괄호로 감싼 형태가 됩니다.
따라서 튜플의 경우 (데이터,)로 쉼표를 추가적으로 입력하여 줍니다.

(머신러닝에서 튜플을 많이 사용)

리스트와 튜플의 특이한 사용

#리스트와 튜플의 특이한 사용
[a, b] = [10, 20]
(c, d) = (30, 40)

#출력하기
print("a:", a)
print("b:", b)
print("c:", c)
print("d:", d)

괄호가 없는 튜플 사용

튜플은 괄호를 생략해도 튜플로 인식할 수 있는 경우 괄호를 생략할 수 있습니다.

#괄호가 없는 튜플
tuple_test = 11, 22, 33, 44
print("튜플인지 확인하기")
print(tuple_test)
print("자료형은 ", type(tuple_test)," 입니다.")

#튜플 활용
a, b, c = 11, 22, 33
print("튜플로 변수 할당하기")
print("a:", a)
print("b:", b)
print("c:", c)

사용하기 편리하여 위와같은 방식으로도 많이 활용이 가능합니다.

변수 값을 교환하는 튜플

변수 두개의 값을 서로 교환하는 방법을
코드로 작성해보신 적이 있으신가요?
a, b의 두 값을 컴퓨터가 변경하려면

a = c
a = b
b = c

로 변수 하나를 추가로 생성하여 값을 변경할 수 있습니다.
하지만, 튜플은 이를 더 간단하게 만들어 줍니다.

# 튜플 활용
a, b = 11, 22
print("교환전 튜플  값")
print("a:", a)
print("b:", b)

# 값을 교환하기
a, b = b, a
print("교환 후 튜플 값")
print("a:", a)
print("b:", b)

여러 개의 값 리턴하기

# 선언합니다.
def test():
    return (11, 22)
  
# 여러 개의 값을 리턴 받기
a, b = test()
print("a:", a)
print("b:", b)

람다

프로그래밍 언어에서 함수라는 ‘기능’을
매개변수로 전달하는 코드를 많이 사용하게 됩니다.
코드를 조금 더 효율적으로 작성하기 위하여
파이썬은 ‘람다(lambda)’라는 기능을 제공합니다.

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

# 매개변수로 받은 함수를 10번 호출하기
def call_10_times(func):
    for i in range(10):
        func()
    
# 간단한 출력
def print_hello():
    print("안녕하세요")

#조합
call_10_times(print_hello)

map() 함수

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

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

# map / filter
def power(item):
    return item * item
def under_5(item):
    return item < 5

# 변수 선언
list_input_a = [1, 2, 3, 4, 5]

output_a = map(power, list_input_a)
output_b = filter(under_3, list_input_a)

print("map의 결과",output_a)
print("map의 결과를 list에 넣기",list(output_a))
print("filter의 결과",output_b)
print("filter의 결과를 list에 넣기",list(output_b))

람다(lambda)로 표현

람다는 간단한 함수를 쉽게 선언하는 방법입니다.
형식
lambda 매개변수: 리턴값

#람다 함수 선언
power = lambda x: x*x
under_5 = lambda x: x<5

#변수 선언
list_input_a = [1, 2, 3, 4, 5, 6]

output_1 = map(power, list_input_a)
output_2 = filter(under_5, list_input_a)

print("map 실행결과 : ",output_1)
print("filter 실행결과 : ",output_2)

람다를 이용하면 코드를 좀 더 깔끔하게 작성이 가능합니다.

list_input_a = [1, 2, 3, 4, 5, 6]
output_a = map(lambda x: x * x, list_input_a)
output_b = filter(lambda x: x < 3, list_input_a)

print("map 결과", output_a)
print("filter 결과", output_b)

함수의 매개변수에 람다는 직접 넣을 수 있습니다.
이를 통해 코드가
어떤 함수인지 간단한 함수를 찾으러 올라가지 않도록 해줍니다.


파일 처리

파일 열고 닫기

불러오기

  • w : write 모드(새로 쓰기)
  • a : append 모드(뒤에 이어서 쓰기)
  • r : read 모드(읽기 모드)
파일 객체 = open("파일경로", "읽기 모드")

닫기

파일 객체.close()

# 파일 열기
file = open("example.txt","w")
# 텍스트 작성
file.write("Hello Python")
# 파일 닫기
file.close()

with 키워드

close()를 따로 적지 않고
코드를 수행한 뒤 이후에 자동으로 닫는 키워드입니다.

형태

with open(문자열: 파일 경로, 문자열: 모드) as 파일 객체:
  문장

예시

# 파일 열기
with open("exaple.txt", "w") as file:
  # 파일에 텍스트 작성
    file.write("Hello Python")

텍스트 읽기

형식

파일객체.read()

예시

# 파일 열기
with open("basic.txt", "r")as file:
    #파일 읽고 출력하기
    contents = file.read()
print(contents)

한 줄씩 쓰고 읽기

100명의 키와 몸무게 만들기

# 랜덤을 import합니다.
import random

# 한글 리스트 만들기
hanguls = list("김이박종용영형준현영환주진현")

# 파일 쓰기모드
with open("info.txt","w") as file:
    for i in range(1000):
    	#랜덤값으로 생성
    	name = random.choice(hanguls) + random.choice(hanguls)
    	weight = random.randrange(40, 100)
    	height = random.randrange(145, 190)
    	# 텍스트 작성
    	file.write("{}, {}, {}\n".format(name, weight, height))

파일을 열어보면
마지막 라인에 엔터 들어가 있는 부분이 확인되어 코드를 수정해보기

# 랜덤을 import합니다.
import random

# 한글 리스트 만들기
hanguls = list("김이박종용영형준현영환주진현")

# 파일 쓰기모드
def make_info():
    #랜덤값으로 생성
    name = random.choice(hanguls) + random.choice(hanguls)
    weight = random.randrange(40, 100)
    height = random.randrange(145, 190)
    # 텍스트 작성
    file.write("{}, {}, {}".format(name, weight, height))

with open("info.txt","w") as file:
    for i in range(1000):
        if i < 999:
            make_info()
            file.write("\n")
        else:
            make_info()

반복문으로 읽어들이기

with open("info.txt","r") as file:
    for line in file:
    	# 변수 선언
    	(name, weight, height) = line.strip().split(", ")
    
    	# 데이터 문제있는지 확인
    	if (not name) or (not weight) or (not height):
        	continue
    	# 결과 계산
    	bmi = int(weight) / ((int(height) / 100) **2)
    	result = ""
    	if 25 <= bmi:
        	result = "과체중"
    	elif 18.5 <= bmi:
        	result = "정상 체중"
    	else:
      		result = "저체중"
    
    	#출력하기
    	print('\n'.join([
    	  "이름: {}",
    	  "몸무게: {}",
    	  "키: {}",
    	  "BMI: {}",
    	  "결과: {}"]).format(name, weight, height, bmi, result))
    	print()

1-6-3. 함수” 에 달린 1개 의견

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다