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-2. 함수호출로 계산시간을 단축해보기. » 코드 한입